Нужно найти файлы, совпадающие с шаблоном, например . Можно ли это сделать без чтения каталога и использования внешних команд? Как foreach в shell: Код (Text): #!/bin/sh for f in /home/andrey/*; do echo $f done
Если использовать конструкции типа foreach, то нужно сперва создать список файлов, а это по любому чтение директории (пусть даже и скрытое, как в shell) . Так что, думаю вряд ли. А чем File::Find не устраивает?..
Придется читать каталог и использовать шаблоны? У меня работает вот это: Код (Text): print </home/andrey/*.las>; В книжке написано, возвращает первый попавшийся файл. Но работает не всегда.
Вообще вы правы, это работает. Правда я читаю в книжке, что такой записи лучше избегать. Предпочтительнее использовать вариант с glob: Код (Text): my @files = glob("/home/andrey/*.las"); for my $f (@files) { print "$f\n"; }
Странно, а раньше с glob не работало. Плохо что в <> нельзя подставить имя переменной. А почему такой записи нужно избегать (кстати, возвращает все файлы, если указать массив)?
Почему вот так: Код (Text): $fd = '/home/andrey/[123,ssa2].las'; Не работает (glob($fd); ничего не выводит) А вот так: Код (Text): $fd = '/home/andrey/sources/perl/*[pl,sh]'; Работает? Все файлы, естественно, уже существуют.
Ну если честно, без понятия. В доке про glob есть замечание, что её поведение в отношении шаблонов как у /bin/csh. Может быть дело в этом.
Кстати, насчет glob и <>. Фактически эти ф-ии читают список файлов из каталога. После использования они, как и в работе с файлами, запоминают текущую позицию. Если вызывать <> или glob в одном блоке программы, записывая результат в $, то они обнуляют текущую позицию, то есть после каждого вызова снова возвращают первый элемент списка. А если вызывать <> или glob внутри процедуры, то после каждого ее вызова текущая позиция внутри каталога сохраняется, то есть, при следующем вызове <> или glob мы получим след. файл или 0. Решение - читать <> / glob в список, а потом извлекать из него первый элемент.
Ага, забавно Использовать список самое рациональное решение, а чтение списка файлов из каталога неизбежно.