如何使用Perl获取文件的dirname?

时间:2010-08-11 06:52:53

标签: perl

在我的perl脚本中,我有param $FILE=/etc/sysconfig/network

以哪种方式(在perl中)我只能剪切目录并将目录放在$ DIR param中

为了获得:

$DIR=/etc/sysconfig

(like dirname /etc/sysconfig/network in shell script)

3 个答案:

答案 0 :(得分:35)

小心! dirname()故意愚蠢地模仿dirname shell命令。它并不是“给我这个文件路径的目录部分”作为“除了这条路径的最后一部分之外给我所有”。为什么这很重要?

my $dir = "/foo/bar/";   # obviously a directory
print dirname($dir);     # prints /foo

这很好,只要你意识到dirname没有返回dirname。

如果您希望上述内容返回/foo/bar/,最好使用File :: Spec。

use File::Spec;
my($vol,$dir,$file) = File::Spec->splitpath($path);

答案 1 :(得分:26)

use File::Basename;

($name,$path,$suffix) = fileparse($fullname,@suffixlist);

$name = fileparse($fullname,@suffixlist);
$basename = basename($fullname,@suffixlist);
$dirname  = dirname($fullname);

详细了解perldoc中的File::Basename

答案 2 :(得分:5)

使用File::Basename核心模块:

use strict;
use warnings;
use File::Basename;

my $FILE = '/etc/sysconfig/network';
my $DIR = dirname($FILE);
print $DIR, "\n";

打印出来:

  

的/ etc / SYSCONFIG