2013-08-16 2 views
0

./a/b 또는 ./a/d 디렉토리에만있는 파일을 나열하려고합니다. 이제 (-d && $_ =~ "b") || (-d && $_ =~ "d")을 사용하여 명시 적으로 지정하고 있습니다. 배열에 필요한 폴더를 넣을 수있는 방법이 있습니까?주어진 디렉토리에만 존재하는 파일을 나열 하시겠습니까?

use File::Find; 

my $filename = "h*.txt"; 
print ("Now it's:", $filename); 

find({ 
    wanted => \&wanted, 
    preprocess => \&dir_preprocess, 
}, './a'); 

sub dir_preprocess { 
    my (@entries) = @_; 

    #my @tmparr=("d","b"); This isn't working 

    if ($File::Find::dir eq './a') { 
     @entries = grep { (-d && $_ =~ "b") || (-d && $_ =~ "d") }@entries; 
    } 
    return @entries; 
} 

my @mylist; 

sub wanted{ 
    if($_ =~ $filename) { 
    push(@mylist, $_); 
    } 
}   

print ("It's:", @mylist); 
+0

@entries 배열에 포함 된 내용을 표시 할 수 있습니까? – user4035

+0

그래,/b와/d의 파일 만 필요합니다. –

+0

'$ _ = ~ "b"''문자열이'b'와 같은지 아닌지 테스트합니다. 그렇게하려면'$ _ eq 'b''가 필요합니다. '= ~'연산자는 오른쪽 인자를 정규 표현식으로 취급합니다. –

답변

2

당신은으로 |을 사용할 수 있습니다 "또는"정규식 표현한다. (-d && $_ =~ /(b|d)/)은 b 또는 d와 일치합니다. 배열에 이름을 넣고 join을 사용하여 필요한 정규식을 생성 할 수 있습니다.

경로 깊이를 늘리는 것과 같은 일을하고 싶을 수도 있습니다. 그렇지 않으면 계층 구조의 여러 단계에서 얻을 수 있습니다. 또한 끝에 $을 추가하여 끝에 오는 것을 나타낼 수 있습니다.

+0

그것은 효과가 있었지만 배열을 사용하여 어떤 방식 으로든 그것을 할 수 있습니까? –

+0

@karate_kid 배열에 폴더를 넣고 join'("|", @ the_array)'을 사용하여 필요한 정규 표현식을 얻을 수 있습니다. 가입에 대한 자세한 정보 [here] (http://perl.about.com/od/perltutorials/qt/perljoin.htm) –

+0

안녕하세요. 하지만 지금은 정확한 결과를주지 못합니다. –

관련 문제