标签: goatse

Perl Goatse的"秘密操作员"是否有效率?

"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)

当我解释使用时,会发生以下情况:

  1. $str =~ /\d/g匹配所有数字.所述g开关和列表环境产生的那些匹配的列表.让它成为"List Producer"的例子,在Perl中这可能是很多东西.
  2. =()=原因,分配到一个空列表,所以所有的实际匹配被复制到一个空列表.
  3. 标量上下文中的赋值给2中生成的列表的$ count给出了列表的计数或结果的5.
  4. =()=标量赋值后,空列表的引用计数变为零.然后Perl删除列表元素的副本.

关于效率的问题是:

  1. 我在解析这个问题时错了吗?
  2. 如果您有一些List Producer,而您感兴趣的只是计数,那么有更有效的方法吗?

这个琐碎的列表很有用,但是如果列表是成千上万的匹配怎么办?使用此方法,您将生成每个匹配的完整副本,然后将其删除以计算它们.

perl performance idioms operators goatse

26
推荐指数
2
解决办法
2267
查看次数

为什么山羊运营商有效?

数组和列表之间以及列表和标量上下文之间的区别已经在去年的Perl社区中进行了相当多的讨论(并且每年都是如此).我已阅读过chromaticfriedo的文章,以及这个推荐的修士节点.现在我想了解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)

syntax perl variable-assignment goatse

10
推荐指数
3
解决办法
554
查看次数