$a = '/etc/init/tree/errrocodr/a.txt'
Run Code Online (Sandbox Code Playgroud)
我想提取   /etc/init/tree/errrocodr/  到$dir与a.txt到$file.我怎样才能做到这一点?
(编者注:原始问题假定你需要一个正则表达式.)
pax*_*blo 24
只需使用Basename:
use File::Basename;
$fullspec = "/etc/init/tree/errrocodr/a.txt";
my($file, $dir, $ext) = fileparse($fullspec);
print "Directory: " . $dir . "\n";
print "File:      " . $file . "\n";
print "Suffix:    " . $ext . "\n\n";
my($file, $dir, $ext) = fileparse($fullspec, qr/\.[^.]*/);
print "Directory: " . $dir . "\n";
print "File:      " . $file . "\n";
print "Suffix:    " . $ext . "\n";
Run Code Online (Sandbox Code Playgroud)
您可以看到这返回您请求的结果,但它也能够捕获扩展(在上一节中):
Directory: /etc/init/tree/errrocodr/
File:      a.txt
Suffix:
Directory: /etc/init/tree/errrocodr/
File:      a
Suffix:    .txt
Run Code Online (Sandbox Code Playgroud)
        enn*_*ler 16
你不需要正则表达式,你可以使用dirname():
use File::Basename;
my $dir = dirname($a)
Run Code Online (Sandbox Code Playgroud)
但是这个正则表达式将起作用:
my $dir = $a
$dir =~ s/(.*)\/.*$/$1/
Run Code Online (Sandbox Code Playgroud)