Подтвердить что ты не робот

Замена пустой строкой: неожиданный результат

Почему два печатных номера отличаются?

#!/usr/bin/env perl
use warnings;
use 5.10.1;

my $sep = '';
my $number = 110110110110111;

$number =~ s/(\d)(?=(?:\d{3})+\b)/$1$sep/g;
say "A: <$number>";

$number =~ s/\Q$sep\E//g;
say "B: <$number>";

Вывод:

A: <110110110110111>
B: <11111111111>
4b9b3361

Ответ 1

Цитировать man perlop:

Если шаблон оценивает пустую строку, последний успешно вместо этого используется обычное выражение.

Попробуйте вставить одно успешное соответствие регулярному выражению перед второй заменой, чтобы увидеть, что происходит:

(my $foo = '1') =~ s/1/x/; # successfully match "1"
$number =~ s///g;          # now you’re deleting all 1s
say "B: <$number>";        # <0000>

Id говорит, что это должно быть устаревшим и предупреждаемым о use warnings, его трудно увидеть преимущества.