Почему это утверждение с предварительным просмотром не работает, когда оно привязано к началу строки? Запустите следующий код, и вы увидите, что первый тест проходит, но второй, который зависит только от привязки ^
, завершается неудачей.
use Test::More tests => 2;
my $s = '/123/456/hello';
$s =~ s{(?<=/)\d+(?=/\d+/hello)}{0}; # unanchored
is($s, '/0/456/hello', 'unanchored'); # passes
$s = '/123/456/hello';
$s =~ s{^(?<=/)\d+(?=/\d+/hello)}{0}; # anchored
is($s, '/0/456/hello', 'anchored'); # fails
Перемещение ^
в проверочное утверждение для меня не вариант (это очень упрощенный пример), но это решает проблему. Я нашел альтернативный способ делать то, что я хочу, но мне любопытно, почему этот подход не сработал. Я проверял это на Perl 5.8.8 и Perl 5.10.0.