Perl:将路径分为目录和文件名

时间:2014-12-26 03:52:15

标签: regex perl path

在我的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 希望它有用

2 个答案:

答案 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