Стандартный оператор замещения выглядит так:
s/PATTERN/REPLACEMENT/
При совпадении ШАБЛОНА он заменяется на ЗАМЕНУ. ЗАМЕНА обрабатывается как строка в двойных кавычках, так что вы можете поместить туда переменные, и это будет просто работать.
s/PATTERN/$var1/
Вы можете использовать это, чтобы включить кусочки соответствующего теста в вашу замену.
s/PA(TT)ERN/$1/
Иногда, однако, этого недостаточно. Возможно, вы хотите обработать текст и запустить подпрограмму, чтобы выяснить, что такое замена. Вот действительно надуманный пример. Предположим, у вас есть текст, который содержит числа с плавающей точкой, и вы хотите заменить их на целые числа. Первый подход может выглядеть так:
#!/usr/bin/perl
use strict;
use warnings;
$_ = '12.34 5.678';
s/(\d+\.\d+)/int($1)/g;
print "$_\n";
Это не работает, конечно. Вы получите «int (12.34) int (5.678)». Но эта строка представляет собой кусок кода, который вы хотите запустить, чтобы получить правильный ответ. Вот что делает опция / e. Он обрабатывает замещающую строку как код, запускает ее и использует вывод в качестве замены.
Изменение строки в приведенном выше примере на
s/(\d+\.\d+)/int($1)/ge;
дает нам требуемый результат.
Теперь, когда вы понимаете, я надеюсь, что вам не нужно объяснение ||. Это просто стандарт или оператор, который вы используете все время. В вашем примере это означает, что «строка замены имеет значение« 123 »или содержимое $ 1». Конечно, это не имеет большого смысла, поскольку «123» всегда будет истинным, поэтому $ 1 никогда не будет использоваться. Возможно, вы хотели наоборот - $ 1 или «123».