Каковы сравнительные преимущества 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 работает.