현재 작성하는 프로그램으로 하위 디렉토리의 이름들을
저장하는 프로그램을 만들려고 합니다.
문제는 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 모듈을 사용하시는 것도 방법이겠지요.
그리고 디렉토리 핸들에서 발생하는 문제가 무엇이지요?
--
익스펙토 페트로눔
예를 들어서...
이런 코드일 경우에 ODIR이 죽지 않고 살아 있어야 하는데요..
RecursiveHandle()을 재귀로 호출하면 ODIR이 다시 호출되어 문제가
발생할텐데. ODIR 핸들을 스칼라값으로 처리했으면 하거든요.
그런 방법이 있나 해서요.. IO::File의 경우는 스칼라값으로 처리하
던데. 혹시 디렉토리 핸들도 그렇게 할 수 있을까요?
(참고로, 위의 알고리즘을 봤을때 해결방법은 배열이나, 해쉬를 써
서 디렉토리 저장-> 하위 디렉토리 저장 -> 조건에 따른 피드백..이
런 식으로 해가면서 진행하면 해결할 수는 있습니다만 제가 궁금한
것이 디렉토리 핸들관련 문제라서요..^^;;)
[code:1]#!/usr/local/bin/perl -w# re
댓글 달기