2010-08-11 36 views
12

在我的Perl腳本,我有帕拉姆$FILE=/etc/sysconfig/network如何使用Perl獲取文件的dirname?

以何種方式(在Perl),我可以只砍目錄,把目錄$ DIR PARAM

爲了得到:

$DIR=/etc/sysconfig 

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

回答

25
use File::Basename; 

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

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

在perldoc中瞭解更多關於File::Basename的信息。

3

使用File::Basename核心模塊:

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

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

此打印出:

的/ etc/SYSCONFIG

31

當心! 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); 
+0

dirname()是陷阱,splitpath()是最好的答案;投票作爲解決方案的答案。 – AjayKumarBasuthkar 2015-11-05 05:55:29

相關問題