"goatse运算符"或=()=Perl中的习语导致表达式在列表上下文中进行评估.
一个例子是:
my $str = "5 and 4 and a 3 and 2 1 BLAST OFF!!!";
my $count =()= $str =~ /\d/g; # 5 matches...
print "There are $count numbers in your countdown...\n\n";
Run Code Online (Sandbox Code Playgroud)
当我解释使用时,会发生以下情况:
$str =~ /\d/g匹配所有数字.所述g开关和列表环境产生的那些匹配的列表.让它成为"List Producer"的例子,在Perl中这可能是很多东西.=()=原因,分配到一个空列表,所以所有的实际匹配被复制到一个空列表.=()=标量赋值后,空列表的引用计数变为零.然后Perl删除列表元素的副本.关于效率的问题是:
这个琐碎的列表很有用,但是如果列表是成千上万的匹配怎么办?使用此方法,您将生成每个匹配的完整副本,然后将其删除以计算它们.
数组和列表之间以及列表和标量上下文之间的区别已经在去年的Perl社区中进行了相当多的讨论(并且每年都是如此).我已阅读过chromatic和friedo的文章,以及这个推荐的修士节点.现在我想了解goatse运营商,中记录perlsecret.
这是我用来研究它的一些代码:
# right side gets scalar context, so commas return rightmost item
$string = qw(stuff junk things);
say $string; # things
# right side gets list context, so middle is list assigned in scalar context
$string = () = qw(stuff junk things);
say $string; # 3
# right side gets list context, so creates a list, assigns an item to $string2, and
# evaluates list in scalar context to assign to …Run Code Online (Sandbox Code Playgroud)