현재 작성하는 프로그램으로 하위 디렉토리의 이름들을
저장하는 프로그램을 만들려고 합니다.
문제는 opendir()을 재귀적으로 호출할려니까,
디렉토리 핸들이 자꾸 걸리네요..ㅠㅠ
opendir() 방법이 아닌..
다른 방법은 없는 건가요?
파일은 라이브러리(?)로 IO::File이 주어져서..
임의의 스칼라값으로 핸들을 구하던데요.
디렉토리 핸들도 마찬가지로 이런 것이 있는지요..
File::Find 모듈을 사용하시는 것도 방법이겠지요. 그리고 디렉토리 핸들에서 발생하는 문제가 무엇이지요?
-- 익스펙토 페트로눔
# 대충 내용 # 하위 디렉토리를 검색하여 원하는 결과를 추려낸다. sub RecursiveHandle{ my $dirname= @_; opendir(ODIR, "$dirname") or die "..."; while{ // 하위 디렉토리 검색 작업 수행 } if(하위 디렉토리가 있으면) RecursiveHandle($subdirname) esle // 없으면, return // 빠져나옴 }
이런 코드일 경우에 ODIR이 죽지 않고 살아 있어야 하는데요..
RecursiveHandle()을 재귀로 호출하면 ODIR이 다시 호출되어 문제가
발생할텐데. ODIR 핸들을 스칼라값으로 처리했으면 하거든요.
그런 방법이 있나 해서요.. IO::File의 경우는 스칼라값으로 처리하
던데. 혹시 디렉토리 핸들도 그렇게 할 수 있을까요?
(참고로, 위의 알고리즘을 봤을때 해결방법은 배열이나, 해쉬를 써
서 디렉토리 저장-> 하위 디렉토리 저장 -> 조건에 따른 피드백..이
런 식으로 해가면서 진행하면 해결할 수는 있습니다만 제가 궁금한
것이 디렉토리 핸들관련 문제라서요..^^;;)
#!/usr/local/bin/perl -w # recursiveHandle dirname sub recursiveHandle { my $dir = shift; my $file; my @list; local *DH; opendir(DH, $dir); while ( defined($file = readdir(DH)) ) { if ($file =~ /^[.]{1,2}$/) { next } if (-d $file) { recursiveHandle("$dir/$file"); } else { push(@list, $file); } } closedir(DH); print("$dir:\n@list\n\n"); } recursiveHandle(".");
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
File::Find 모듈을 사용하시는 것도 방법이겠지요.그리고 디렉토
File::Find 모듈을 사용하시는 것도 방법이겠지요.
그리고 디렉토리 핸들에서 발생하는 문제가 무엇이지요?
--
익스펙토 페트로눔
예를 들어서...
# 대충 내용 # 하위 디렉토리를 검색하여 원하는 결과를 추려낸다. sub RecursiveHandle{ my $dirname= @_; opendir(ODIR, "$dirname") or die "..."; while{ // 하위 디렉토리 검색 작업 수행 } if(하위 디렉토리가 있으면) RecursiveHandle($subdirname) esle // 없으면, return // 빠져나옴 }이런 코드일 경우에 ODIR이 죽지 않고 살아 있어야 하는데요..
RecursiveHandle()을 재귀로 호출하면 ODIR이 다시 호출되어 문제가
발생할텐데. ODIR 핸들을 스칼라값으로 처리했으면 하거든요.
그런 방법이 있나 해서요.. IO::File의 경우는 스칼라값으로 처리하
던데. 혹시 디렉토리 핸들도 그렇게 할 수 있을까요?
(참고로, 위의 알고리즘을 봤을때 해결방법은 배열이나, 해쉬를 써
서 디렉토리 저장-> 하위 디렉토리 저장 -> 조건에 따른 피드백..이
런 식으로 해가면서 진행하면 해결할 수는 있습니다만 제가 궁금한
것이 디렉토리 핸들관련 문제라서요..^^;;)
[code:1]#!/usr/local/bin/perl -w# re
#!/usr/local/bin/perl -w # recursiveHandle dirname sub recursiveHandle { my $dir = shift; my $file; my @list; local *DH; opendir(DH, $dir); while ( defined($file = readdir(DH)) ) { if ($file =~ /^[.]{1,2}$/) { next } if (-d $file) { recursiveHandle("$dir/$file"); } else { push(@list, $file); } } closedir(DH); print("$dir:\n@list\n\n"); } recursiveHandle(".");댓글 달기