my($digits,$number);
if ($input =~ /^(\d*)(8675309)$/) {
($digits,$number) = ($1,$2);
}
Квантор *
является жадным, но это означает, что он максимально соответствует , но при этом допускает совпадение . Итак, изначально, да, \d*
пытается сожрать все цифры в $number
, но неохотно отдает символ за символом, с которым сопоставляется, до тех пор, пока весь шаблон не будет успешно сопоставлен.
Другой подход - отрубить хвост:
(my $digits = $input) =~ s/8675309$//;
Вы можете сделать то же самое без использования регулярного выражения:
my $digits = $input;
substr($digits, -7) = "";
Выше, по крайней мере, с perl-5.10-1, можно даже сжать до
substr(my $digits = $input, -7) = "";