我正在尝试在Perl中剪切目录路径。 这是我的代码
#!/usr/bin/perl
use warnings;
use strict;
my $filespec = "/var/www/grammer/lecture12.mp4";
my $relative = $1 if $filespec =~ m{/var/www(.*)};
print $relative;
输出
/grammer/lecture12.mp4
现在,如果我在路径中没有/var/www
,那么只有
my $filespec = "/grammer/lecture12.mp4";
此输出为空白,并显示警告。但我期待这个输出路径/grammer/lecture12.mp4
。
可能是我匹配路径/var/www/
。这就是它没有提供所需输出的原因。或者还有其他错误吗?我只想在regex
做。
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以像这样使用替换运算符s///
。我不知道您打算使用修改后的路径,但是您应该注意到一个前导斜杠意味着它是一个绝对路径,位于文件系统的根目录
#!/usr/bin/perl
use strict;
use warnings 'all';
use v5.14.1;
my $filespec = '/var/www/grammar/lecture12.mp4';
my $relative = $filespec =~ s|^/var/www||r;
say $relative;
/grammar/lecture12.mp4
答案 1 :(得分:0)
你得到警告,因为$ relative仅在$ filespec中有/ var / www时被初始化,这与它是空的相同。
此外,您应该检查$ file_spec是否以/ var / www开头,但不包含在内部。
你也省略了www之后的斜杠,所以你的正则表达式会在像/var/www2/and/so/on.mp4这样的路径上失败
考虑到这一点,你应该改变行
my $relative = $1 if $filespec =~ m{/var/www(.*)};
到以下代码:
$filespec =~ m{^/var/www/(.*)};
my $relative = $1||$filespec;