Perl钻石运营商内部奇怪的事情

ale*_*rik 5 perl diamond-operator

拜托,任何人都可以帮助我:

perl -e 'print for <{a,b,c}{1,2,3}>'
Run Code Online (Sandbox Code Playgroud)

我只是不明白它是如何工作的.它的工作原理!生产

a1a2a3b1b2b3c1c2c3
Run Code Online (Sandbox Code Playgroud)

在输出上.

有谁知道钻石运营商内部发生了什么?

Zai*_*aid 7

这是表示globbing 的另一种方式.基本上,curlies告诉glob操作员将每个逗号分隔的元素放在内部并结合所有可能性.

更清楚的方法是将逗号分开各个输出:

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

来自perldoc -f glob:

如果非空大括号是glob中使用的唯一通配符,则不匹配任何文件名,但可能会返回许多字符串.例如,这会产生九个字符串,每个字符串用于水果和颜色的配对:

@many =  glob "{apple,tomato,cherry}={green,yellow,red}";
Run Code Online (Sandbox Code Playgroud)