Perl File Globbing Oddities - PullRequest
       8

Perl File Globbing Oddities

2 голосов
/ 23 февраля 2011

Я пишу сценарий, который будет циклически проходить по диапазону чисел, создавать шаблон глобуса и проверять, существует ли файл в каталоге на основе глобуса.

Изображения являются изображениями номеров автомобилей Nascar.и следуйте следующей схеме:

1_EARNHARDTGANASSI_256.TGA
2_PENSKERACING_256.TGA

Вот фрагмент сценария, который я использую:

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");
    }   
}

Проблема, с которой я сталкиваюсь, состоит в том, что изображения существуютв каталоге, и это должно соответствовать шаблону глобуса файла не.

Например, файл со следующим именем возвращается как несуществующий:

2_PENSKERACING_256.TGA

Принимая во внимание, что следующее возвращается как существующее:

1_EARNHARDTGANASSI_256.TGA

Если я используюодин и тот же шаблон глобуса файла в DOS или Cygwin, оба файла перечислены правильно.

По-разному ли интерпретируются шаблоны глобуса файла в Perl?Что-то мне не хватает?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2011

Вам нужно, чтобы результаты возвращались в формате списка, а не в скалярном формате. Попробуйте это для своего утверждения if, оно сработало для меня, когда я его проверил.

if (my @arr = glob("//headshot01/CARS/${currCarNum}_*_256.TGA")) {
1 голос
/ 24 февраля 2011

С perldoc perlop :

Глобус (файл) оценивает свой (встроенный) аргумент только тогда, когда он начинает новый список.Все значения должны быть прочитаны, прежде чем он начнется заново.В контексте списка это не важно, потому что вы все равно автоматически получаете их все.Однако в скалярном контексте оператор возвращает следующее значение каждый раз, когда он вызывается, или undef, когда список исчерпан .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...