Как получить файл 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