2009-10-14 5 views
3

나는 디렉토리에서 특정 파일을 찾아서 처리하는 스크립트를 작성하고있다. 내가 쓰고 계속 다음하나의 명령문으로 Perl에서 디렉토리를 읽을 수 있습니까?

opendir DIR, $dir; 
@files = readdir DIR; 
closedir DIR; 

동안 이 할 수있는 더 우아한 방법이 있는지 (그리고이해야 사실 에) 기능이 포장, 궁금 수 있을까요?

+0

이 질문에 대한 답변을 확인해보십시오. http://stackoverflow.com/questions/ 1506801/what-reasons-there-to-prefer-glob-over-readdir 또는 versa-in-perl – innaM

+1

"디렉토리 작성"이란 정확히 무엇을 의미합니까? –

+0

나는 "다음 * 코드 작성"을 의미합니다. –

답변

14

가장 우아한 것은 다른 누군가가 이미 작성한 기능을 사용하는 것입니다.

use File::Slurp; 

@files = read_dir $dir; # . and .. are removed by default 
1

나는 이런 종류의 것에 대해 File::Find을 사용하고 싶습니다.

+1

한 디렉터리에서 파일 목록을 가져 오기 위해 깊이 우선 검색을 원하십니까? –

5

또 다른 방법은 do 블록을 사용하는 것입니다 :

my @files = do { 
    opendir my $d, '/your/dir/'; 
    readdir $d; 
}; 

내 $ d를이와 closedir 파일 핸들이기 때문에 필요하지 않습니다 (당신이 DIR 글로벌는 달리) 차단할 지역이기 때문에 더 우아한 $ d가 범위를 벗어날 때 자동으로 닫힙니다.

/I3az은/

0

아무도 아직 glob을 제안하지 않았다?

@files = glob("$dir/*"); 

을 또는 당신도, 점으로 시작 파일을 필요로하는 경우 : OK, 여기 간다

@files = glob("$dir/{.,}*") 
0

글로브는 가장 간단한 솔루션입니다. 파일을 두 번 이상 열지 않는 한 처음 세 줄이 서브 루틴에 속한다고 생각하는지 모르겠다.

관련 문제