Оператор 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";
Как я интерпретирую, происходит следующее:
$ str = ~ / \ d / g
соответствует всем цифрам. Контекст переключателя и списка g
создает список этих совпадений. Пусть это будет пример «List Producer», а в Perl это может быть много вещей. = () =
вызывает присвоение пустому списку, поэтому все фактические совпадения копируются в пустой список. = () =
обращается в ноль после скалярного присвоения. Копия элементов списка затем удаляется Perl. Вопросы по эффективности таковы:
Он отлично работает с этим тривиальным списком, но что, если бы список состоял из сотен тысяч совпадений? С помощью этого метода вы создаете полную копию каждого совпадения, а затем удаляете ее, чтобы посчитать их.