На данный момент я знаю два способа открыть и прочитать каталог на Perl. Вы можете использовать opendir
, readdir
и closedir
или можете просто использовать glob
, чтобы получить содержимое каталога.Perl readdir как однострочный?
Пример:
Используя opendir
, readdir
и closedir
:
opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;
glob
Использование:
my @contents = <$directory/*>;
Я был проинформирован, что в некоторых ситуациях метод glob
может привести к непредсказуемым результатам (например, он может действовать по-разному на разных операционных системах, когда он встречает специальные символы в именах каталогов).
Что мне нравится в методе glob
, так это то, как «быстро и грязно». Это одна простая строка, и она выполняет свою работу, но если она не работает во всех ситуациях, которые могут привести к неожиданным и трудным для поиска ошибкам.
мне было интересно, если есть своего рода путь «сокращенном», чтобы использовать
opendir
,readdir
,closedir
метод?
Возможно, что-то вроде этого fancy method for slurping a file в одной строке, которую я недавно обнаружил.
Мне любопытно, что думает тот, кто сообщил вам, что произойдет в тех случаях со специальными символами в именах каталогов. –
@AndyLester Я думаю, что OP ссылается на комментарий о пробелах в именах каталогов. 'mkdir" foo bar "&& touch" foo bar/baz "&& perl -E '$ dir =" foo bar "; скажем, для <$dir/*> ''(можно решить, указав аргумент' glob') – ThisSuitIsBlackNot
Вот отличная запись glob vs. readdir: https://stackoverflow.com/questions/1506801/what-reasons-are-there -to-prefer-glob-over-readdir-or-vice-versa-in-perl –