Как получить файл dirname с Perl?

В моем perl script у меня есть параметр $FILE=/etc/sysconfig/network

каким образом (в perl) я могу разрезать только каталог и поместить каталог в $DIR param

чтобы получить:

$DIR=/etc/sysconfig

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

Ответ 1

use File::Basename;

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

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

Подробнее о File:: Basename в perldoc.

Ответ 2

Остерегайтесь! dirname() намеренно немой, чтобы эмулировать команду оболочки dirname. Это не столько "дать мне часть каталога этого пути", сколько "дать мне все, кроме последней части этого пути". Почему это важно?

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);

Ответ 3

Используйте File:: Basename основной модуль:

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

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

Это выдает:

/и т.д. /sysconfig