2011-02-23 3 views
2

숫자 범위를 반복하고, glob 패턴을 만들고, glob에 기반한 디렉토리에 파일이 있는지 테스트 할 스크립트를 작성하고 있습니다.Perl File Globbing Oddities

foreach $currCarNum (0..101) { 
    if (glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {  
     print("Car image $currCarNum exists\n"); 
    } else { 
     print("Car image $currCarNum doesn't exist\n"); 
    } 
} 

난 문제 : 다음

1_EARNHARDTGANASSI_256.TGA 
2_PENSKERACING_256.TGA 

는 내가 사용하고있는 스크립트의 코드 조각입니다 :

이미지는 나스카 자동차 번호 이미지, 그리고 다음과 같은 패턴을 따른다 가지고있는 것은 그 디렉토리에 존재하는 이미지이며 glob 패턴과 일치해야합니다.

예를 들어, 다음과 같은 이름의 파일은 존재하지 않는 반환

2_PENSKERACING_256.TGA 

기존과 다음 반환, 반면 :

1_EARNHARDTGANASSI_256.TGA 

나는 DOS에서 동일한 파일 글로브 패턴을 사용하는 경우 또는 Cygwin에서 두 파일 모두 제대로 나열됩니다.

파일 glob 패턴은 Perl에서 다르게 해석됩니까? 제가 누락 된 것이 있습니까?

+0

참조 ['perldoc을 -f glob'] (http://perldoc.perl.org/functions/glob.html) –

+0

@ 브래드 : perlop 더 나은 설명 –

답변

2

결과를 스칼라 형식 대신 목록 형식으로 반환해야합니다. if 문에 이것을 시도해보십시오, 테스트 할 때 저에게 효과적이었습니다. perldoc perlop에서

if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) { 
+0

완벽한, 감사를 갖고있는 것 같아요. 나는 해킹을하기 전에 Perl을 더 잘 배울 필요가 있습니다. :) – Steve

1

:

A (파일) 글로브는이 새 목록을 시작하는 경우에만 그 (임베디드) 인수를 평가합니다. 모든 값은 다시 시작하기 전에 으로 읽어야합니다. 목록 컨텍스트에서 이것은 자동으로 모든 것을 얻을 수 있기 때문에 중요하지 않습니다. 그러나 스칼라 컨텍스트에서 연산자는 목록이 만료되었을 때 각각 시간 후에 다음 값을 반환하거나 undef를 반환합니다..