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