Я действительно не знаю, почему он останавливается на 'test', насколько я понимаю, он заменяет любой символ в начале строки ничем, так почему он останавливается на test?
Из-за того, что \/
является частью шаблона.
# V here
$url =~ s/^.*\///;
Было бы понятнее, если бы в коде использовался другой разделитель кавычек, что возможно в Perl. Таким образом, здесь не было бы синдрома наклоняющейся зубочистки .
$url =~ s{^.*/}{};
Обратите внимание, что по умолчанию он является жадным, поэтому он будет поглощать все косые черты до последнего.
Вы можете использовать re
pragma в режиме отладки, чтобы узнать больше о том, что движок regex делает под капотом.
use re 'debug';
my $url = "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS";
$url =~ s{^.*/}{};
Выводится в STDERR.
Compiling REx "^.*/"
Final program:
1: SBOL /^/ (2)
2: STAR (4)
3: REG_ANY (0)
4: EXACT </> (6)
6: END (0)
floating "/" at 0..9223372036854775807 (checking floating) anchored(SBOL) minlen 1
Matching REx "^.*/" against "http://perltest.my-mobile.org/c/test.cgi?u=USER&p=PASS"
Intuit: trying to determine minimum start position...
doing 'check' fbm scan, [0..54] gave 5
Found floating substr "/" at offset 5 (rx_origin now 0)...
(multiline anchor test skipped)
Intuit: Successfully guessed: match at offset 0
0 <> <http://per> | 0| 1:SBOL /^/(2)
0 <> <http://per> | 0| 2:STAR(4)
| 0| REG_ANY can match 54 times out of 2147483647...
31 <org/c> </test.cgi?> | 1| 4:EXACT </>(6)
32 <rg/c/> <test.cgi?u> | 1| 6:END(0)
Match successful!
Freeing REx: "^.*/"