Странные вещи внутри алмазного оператора Perl - PullRequest
5 голосов
/ 24 октября 2011

Пожалуйста, кто-нибудь может мне помочь с этим:

perl -e 'print for <{a,b,c}{1,2,3}>'

Я просто не понимаю, как это работает. И это работает! Производство

a1a2a3b1b2b3c1c2c3

на выходе.

Кто-нибудь знает, что происходит внутри алмазного оператора?

1 Ответ

7 голосов
/ 24 октября 2011

Это еще один способ представить glob bing. По сути, curlies говорят оператору glob взять каждый элемент, разделенный запятыми, внутри и объединить все возможности.

Более ясный способ увидеть это - разделить запятыми отдельные выходы:

$ perl -e 'print join ",", <{a,b,c}{1,2,3}>;'
a1,a2,a3,b1,b2,b3,c1,c2,c3

С perldoc -f glob:

Если непустые скобки являются единственными символами подстановки, используемыми в глобусе, имена файлов не совпадают, но потенциально может быть возвращено много строк. Например, это производит девять строк, по одной для каждой пары фрукты и цвета:

@many =  glob "{apple,tomato,cherry}={green,yellow,red}";
...