我想匹配并在一行中分配一个变量:
my $abspath='/var/ftp/path/to/file.txt';
$abspath =~ #/var/ftp/(.*)$#;
my $relpath=$1;
Run Code Online (Sandbox Code Playgroud)
我相信一定很容易.
Qta*_*tax 17
my ($relpath) = $abspath =~ m#/var/ftp/(.*)$#;
Run Code Online (Sandbox Code Playgroud)
在列表上下文中,匹配返回组的值.
dax*_*xim 15
必要的Clippy:"嗨!我看到你在Perl 中进行路径操作.你想使用Path :: Class吗?"
use Path::Class qw(file);
my $abspath = file '/var/ftp/path/to/file.txt';
my $relpath = $abspath->relative('/var/ftp');
# returns "path/to/file.txt" in string context
Run Code Online (Sandbox Code Playgroud)
您可以使用匹配和替换运算符来完成它:
(my $relpath = $abspath ) =~ s#/var/ftp/(.*)#$1# ;
Run Code Online (Sandbox Code Playgroud)
此代码分配$abspath给$relpath然后在其上应用正则表达式.
编辑:如果您只需要简单的匹配,Qtax答案会更优雅.如果您需要复杂的替换(我通常需要),只需使用我的表达式.
使用Perl 5.14,您还可以使用/r(非破坏性替换)修饰符:
perl -E'my $abspath="/var/ftp/path/to/file.txt"; \
my $relpath= $abspath=~ s{/var/ftp/}{}r; \
say "abspath: $abspath - relpath: $relpath"'
Run Code Online (Sandbox Code Playgroud)
有关更多示例,请参阅" Perl 5.14的新功能:非破坏性替换 ".