Perl中的“goatse operator”或=()=
成语会导致在列表上下文中评估表达式。Perl Goatse'Secret Operator'是否高效?
一个例子是:
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";
正如我interprete使用,这是发生了什么:
$str =~ /\d/g
所有的数字相匹配。g
开关和列表上下文产生这些匹配的列表。让它成为“List Producer”示例,在Perl中,这可能是很多事情。=()=
导致对空列表的分配,因此所有实际匹配都被复制到空列表中。- 在标量上下文中2生成的列表$数分配给该列表的计数或5
- 空列表的引用计数
=()=
标转让后变为零的结果。列表元素的副本然后由Perl删除。
对效率的问题是:
- 我错在我是怎么解析呢?
- 如果您有一些List Producer,并且您感兴趣的是count,是否有更高效的方法来执行此操作?
它可以很好地处理这个简单的列表,但是如果列表成千上万的匹配呢?使用这种方法,您将生成每场比赛的完整副本,然后删除它以便对它们进行计数。
它不如设计自定义微芯片来实现您的程序效率。 – jrockway 2010-10-21 20:59:09
为什么选择投票?这对于效率和成语之间的权衡是不是一个公平的问题? – dawg 2010-10-21 21:02:08
对不起,我无法抗拒成为'[goatse]'的标签创作者。 :D – Ether 2010-10-21 21:48:14