Как мне получить dirname файла с Perl? - PullRequest
14 голосов
/ 11 августа 2010

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

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

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

$DIR=/etc/sysconfig

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

Ответы [ 3 ]

35 голосов
/ 11 августа 2010

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

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

Это нормально, только если вы понимаете, что dirname не возвращает имя.

Если вы хотите, чтобы вышеприведенное вернуло /foo/bar/вам лучше использовать File :: Spec.

use File::Spec;
my($vol,$dir,$file) = File::Spec->splitpath($path);
26 голосов
/ 11 августа 2010
use File::Basename;

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

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

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

5 голосов
/ 11 августа 2010

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

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

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

Это распечатывает:

/ и т.д. / sysconfig

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...