Каковы сравнительные преимущества glob ('foo *') над <foo *>?
Я просто смотрел Может ли кто-нибудь сказать мне, как создать массив содержимого каталога?. Неудивительно, что файловые глобусы были предложены в качестве ответа. Меня удивило то, что пост рекомендовал использовать glob()
, а не <*>
.
Я использую <*>
, потому что это то, что я узнал давно и никогда не думал об этом. Это не очень хорошая причина.
Какой синтаксис вы предпочитаете для globbing и почему?
Ответы
Ответ 1
Лично я считаю, что <>
сильно перегружен. Это вроде бы означает "читать с итератора", но там слишком много магии и тонкости в определении того, какой итератор какого рода на мой вкус. например <$foo>
и <$foo{bar}>
означают очень разные вещи, а магический голый <>
означает еще что-то другое.
Я предпочитаю использовать glob
и резервировать синтаксис <>
для дескрипторов. Это позволяет сэкономить когнитивную нагрузку на выяснение того, является ли содержимое <>
шаблоном, а не дескриптором (или чем-то, что разрешает его). Тем не менее, если вы мысленно ассоциируете нотацию <>
с "итератором" вместо "читать", вы можете предпочесть функциональный синтаксис - по крайней мере, для тех случаев, когда вы хотите переходить на результаты, а не генерировать список.
Ответ 2
В этом perldoc вы связываете некоторые проблемы с синтаксисом угловой скобки:
Один уровень двойной кавычки интерпретация выполняется сначала, но вы не может сказать <$foo>
, потому что косвенный дескриптор файла, как описано в предыдущий пункт. (В старшем версии Perl, программисты вставьте фигурные скобки, чтобы заставить интерпретация как имя файла glob: <${foo}>
. В эти дни он считал очиститель для вызова внутренней функции непосредственно как glob($foo)
, что вероятно, правильный способ сделать это в первую очередь.)
В основном я использую File::Find
и сам себе.
Ответ 3
В эти дни я придерживаюсь glob
, потому что считаю его более читаемым и новичком (*) по сравнению с угловыми скобками.
(*) perldoc -f glob
работает.