Если вас беспокоит перехват и случайная печать нулей, есть быстрый и простой способ, который почти все порекомендуют вам сначала: добавьте в свою программу следующее:
use strict;
use warnings;
Проблема, в частности, кажется странной; когда я
my $foo = 'zip';
$foo =~ /(bal)/;
print "\$1: '$1'";
Я получаю
$1: ''
(а при использовании строгих и предупреждений дополнительная ошибка
Use of uninitialized value in concatenation (.) or string at - line 5.
Конечно, вы можете предотвратить нулевое значение $ 1, если протестируете свое регулярное выражение:
if ($foo =~ /(pattern)/) {
# $1 is guaranteed to be ok here, if it matched
}
Так что, да, возможно, ваш регистратор интерпретирует $ 1 как что-то еще. Попробуйте добавить еще два \\
; один для избежания $, а другой для избежания дополнительной обратной косой черты. Таким образом это выглядело бы как
print "\\\$1: '$1'";