Каковы сравнительные преимущества glob ('foo *') над ‹foo *›?

Я просто смотрел Может кто-нибудь подскажет, как создать массив содержимого каталогов?. Неудивительно, что в качестве ответа были предложены файловые глобусы. Что меня удивило, так это то, что в сообщении рекомендуется использовать glob() вместо _ 2_.

Я использую <*>, потому что это то, чему я научился давным-давно и никогда не думал об этом. Что не является уважительной причиной.

Какой синтаксис вы предпочитаете для подстановки и почему?


person Community    schedule 18.01.2010    source источник
comment
Мне любопытно, почему вы сделали эту вики сообщества. Это хороший вопрос, по теме, и не очень субъективный. Если вы отметите его CW, у людей, заинтересованных в укреплении своей репутации, не будет стимула отвечать на вопросы. Вы хотели снизить планку, чтобы другие могли редактировать сам вопрос?   -  person Michael Carman    schedule 18.01.2010
comment
Сказать по правде, я бы тоже не возражал против представителя. Я сделал это CW, потому что вопрос субъективен и похож на опрос. Что предпочитаете вы? А не вопрос с единственно правильным ответом. Насколько я понимаю, такие вопросы должны задаваться телеграфом. Я мог ошибаться, я ошибался бесчисленное количество раз по многим вопросам.   -  person daotoad    schedule 18.01.2010
comment
Единственный правильный ответ? В Perl?!? !!? TMTOWTDI! (-:   -  person Rob Wells    schedule 27.03.2013


Ответы (3)


Лично я считаю, что <> сильно перегружен. Это своего рода означает «читать из итератора», но здесь слишком много магии и тонкости в определении того, какой итератор какого типа на мой вкус. например <$foo> и <$foo{bar}> означают совсем разные вещи, а магический голый <> означает совсем другое.

Я предпочитаю использовать glob и зарезервировать синтаксис <> для дескрипторов. Это избавляет от когнитивного бремени выяснения, является ли содержимое <> шаблоном, а не дескриптором (или чем-то, что сводится к одному). Тем не менее, если вы мысленно связываете нотацию <> с «итератором» вместо «чтения», вы можете предпочесть это функциональному синтаксису - по крайней мере, для тех случаев, когда вы хотите перешагнуть через результаты, а не генерировать список.

person Community    schedule 18.01.2010

В том perldoc, который вы связали, говорится, что есть некоторые проблемы с синтаксисом угловых скобок:

Сначала выполняется один уровень интерпретации двойных кавычек, но вы не можете сказать <$foo>, потому что это косвенный дескриптор файла, как объяснено в предыдущем абзаце. (В более старых версиях Perl программисты вставляли фигурные скобки для принудительной интерпретации как имени файла glob: <${foo}>. В наши дни считается более чистым вызывать внутреннюю функцию напрямую как glob($foo), что, вероятно, является правильным способом сделать это в первую очередь.)

В основном я сам использую File::Find и ему подобные.

person Community    schedule 18.01.2010
comment
Ваш жирный текст - всего лишь утверждение: кто считает себя более чистым, в каких случаях? В другом тексте упоминается потенциальная двусмысленность с <$foo>, с которой я никогда не сталкивался как с проблемой реального кода. В этом примечании говорится, что форма является проблемой только при возникновении двусмысленности, или она применима ко всем видам использования glob? - person daotoad; 18.01.2010
comment
File :: Find - довольно сложная задача, когда все, что вам нужно, - это глобус. Но это определенно лучше, чем писать собственный рекурсивный код обхода каталогов. Вы говорите, и это так, какие еще конкретные модули вы имели в виду? - person daotoad; 18.01.2010
comment
@daotoad: Считается чище, по крайней мере, Ларри Уоллом (по состоянию на Perl 5.002 beta 1, с 21 ноября 1995 г.), согласно истории git perlop.pod. (И мной, чего бы это ни стоило.) - person Keith Thompson; 11.06.2013

Сейчас я придерживаюсь glob, потому что считаю его более читаемым и удобным для новичков (*) по сравнению с использованием угловых скобок.

(*) perldoc -f glob работает.

person Community    schedule 19.01.2010