13
Dlaczego dwie drukowane liczby są różne?Zamienianie na pusty ciąg znaków: nieoczekiwany wynik
#!/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>";
wyjściowa:
A: <110110110110111>
B: <11111111111>
Należy zauważyć, że to pokazuje, że \ Q \ E i interpolacja są operacjami łańcuchowymi, a nie częścią właściwego wyrażenia regularnego, ponieważ wszystkie one są rozstrzygane przed testem "wzorzec ocenia na pusty ciąg". Jeśli naprawdę chcesz zapobiec temu błędowi, a twoje wyrażenie regularne składa się z tylko interpolowanych bitów, które mogą być puste, podaj '(? #)', Które nie ma wpływu na dopasowanie, ale sprawia, że wzór nie jest pusty. – ysth