在我的Perl脚本中,我想将路径字符串分成两个字符串:目录和文件名。
例如,例如./output/try.txt拆分为./output和try.txt
现在我用左
$path =~ s/(\/?)[^\/]*$/${1}/
可以获取目录部分。
对第二部分有点困惑。
我是正规表达的新手,需要一些帮助。
根据我自己的测试,我找到了一个好方法:
$path = "./output/try.txt"
$dir = $path
$dir =~ s/([^\/]*$)//;
$file = $1
使用s将文件名与[^ /] * $匹配,并将其替换为空,然后可以获取$ dir。 mateched部分$ 1将是$ file 希望它有用
答案 0 :(得分:1)
使用m atch运算符的一种解决方案:
$ perl -e '
my $fp = "/path/to/file.pl";
my ($path, $file) = $fp =~ m!(.*)/(.*)!;
print "path=$path\nfile=$file\n"
'
或:
$ perl -e '
$fp = "/path/to/file.pl";
$fp =~ m!(.*)/(.*)! and print "path=$1\nfile=$2\n"
'
path=/path/to
file=file.pl
答案 1 :(得分:1)
您最好使用核心模块File::Basename:
use Modern::Perl;
use File::Basename;
my $fullname = './output/try.txt';
my $basename = basename($fullname);
my $dirname = dirname($fullname);
say $fullname;
say $basename;
say $dirname;
<强>输出:强>
./output/try.txt
try.txt
./output