代码有点复杂,但我简化了一点。我知道我可以轻松做到这一点:
$svn_module s#.*/##;
并拉出模块的末端。但是这里发生了一些奇怪的事情:
#! /usr/bin/env perl
use strict;
use warnings;
my $svn_module = "http://svn.vegicorp.net/svn/trunk/SessionController";
print qq(DEBUG: svn_module = "$svn_module"\n);
$svn_module =~ s#^.*(branches/.+?/)|(trunk)/##;
print qq(DEBUG: svn_module = "$svn_module"\n);
这打印:
DEBUG: svn_module = "http://svn.vegicorp.net/svn/trunk/SessionController"
DEBUG: svn_module = "http://svn.vegicorp.net/svn/SessionController"
但是,我期待:
DEBUG: svn_module = "http://svn.vegicorp.net/svn/trunk/SessionController"
DEBUG: svn_module = "SessionController"
为什么我的替换表达式删除trunk/
,而不是字符串的其余部分trunk/
?
顺便说一句,添加一组额外的括号有助于:
$svn_module =~ s#^.*((branches/.+?/)|(trunk))/##;
将工作。
顺便说一下,这是 Perl 5.8.8。这是一个服务器,几乎是我坚持的版本。