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

Regex Perl:将路径分为目录和文件名,regex,perl,path,Regex,Perl,Path,在我的Perl脚本中,我想将路径字符串分为两个字符串:目录和文件名 例如,例如./output/try.txt被拆分为./output和try.txt 现在我使用 $path=~s/(\/?)[^\/]*$/${1}/ 可以获取目录部分。 对第二部分有点困惑。 我是正则表达式新手,需要一些帮助 根据我自己的测试,我找到了一个好方法: $path=“./output/try.txt” $dir=$path $dir=~s/([^\/]*$)/ $file=$1 使用s将文件名与[^/]*$匹配,

在我的Perl脚本中,我想将路径字符串分为两个字符串:目录和文件名
例如,例如./output/try.txt被拆分为./output和try.txt 现在我使用
$path=~s/(\/?)[^\/]*$/${1}/

可以获取目录部分。 对第二部分有点困惑。
我是正则表达式新手,需要一些帮助

根据我自己的测试,我找到了一个好方法:
$path=“./output/try.txt”

$dir=$path

$dir=~s/([^\/]*$)/
$file=$1

使用s将文件名与[^/]*$匹配,并将其替换为空,然后可以获得$dir。匹配的部分$1将是$file。
希望对您有所帮助

一个使用atch运算符的解决方案:

$ perl -e '
    my $fp = "/path/to/file.pl";
    my ($path, $file) = $fp =~ m!(.*)/(.*)!;
    print "path=$path\nfile=$file\n"
'
或:

输出:
您最好使用核心模块:

输出:

./output/try.txt
try.txt
./output

我想你已经有了答案。请尝试检查此url
path=/path/to
file=file.pl
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