Распечатать текущий каталог с помощью Perl - PullRequest
18 голосов
/ 18 апреля 2011

У меня есть этот код для печати текущего каталога с использованием Perl:

use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";

Но он отображает имя файла моего скрипта вместе с каталогом.

Как это:

C: \ Perl \ duration.pl

Я хочу, чтобы отображался только C:\Perl\.

Как я могу это сделать?

Ответы [ 7 ]

40 голосов
/ 18 апреля 2011

Чтобы получить текущий рабочий каталог (pwd во многих системах), вы можете использовать cwd() вместо abs_path:

use Cwd qw();
my $path = Cwd::cwd();
print "$path\n";

Или abs_path без аргумента:

use Cwd qw();
my $path = Cwd::abs_path();
print "$path\n";

Подробнее см. Cwd docs .

Чтобы получить каталог, в котором находится ваш perl-файл, извне каталога:

use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";

Подробнее см. В документах File :: Basename .

14 голосов
/ 18 апреля 2011

Каждый из следующих фрагментов получает каталог скрипта, который не совпадает с текущим каталогом. Не ясно, какой вы хотите.

use FindBin qw( $RealBin );

say $RealBin;

или

use Cwd            qw( abs_path );
use File::Basename qw( dirname );

say dirname(abs_path($0));

или

use Cwd         qw( abs_path );
use Path::Class qw( file );

say file(abs_path($0))->dir;
5 голосов
/ 22 июля 2013

Использование:

print($ENV{'PWD'});

Но я думаю, что это не работает в Windows ...

3 голосов
/ 16 июля 2012

Просто удалите '$ 0'

use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";
2 голосов
/ 23 ноября 2016

Вот одно простое решение:

    use Cwd;
    my $cwd = cwd();
    print "Current working directory: '$cwd()'";

Надеюсь, это поможет.

1 голос
/ 18 апреля 2011

Вы можете использовать FindBin:

use FindBin '$RealBin';
print "$RealBin\n";

FindBin - это стандартный модуль, который устанавливается при установке Perl.Чтобы получить список стандартных прагматик и модулей, см. perldoc perlmodlib.

0 голосов
/ 09 июля 2015

Я использовал свой скрипт в директориях с символическими ссылками.Сценарий анализирует путь и выполняет команды в зависимости от пути.Я столкнулся с правильным определением текущего пути.

Вот пример:

root@srv apache # pwd
/services/apache

root@srv apache # readlink -f .
/services/apache2225

Путь раскрытия модуля Cwd (аналог readlink -f) http://perldoc.perl.org/Cwd.html

root@server apache # perl -e 'use Cwd; print cwd . "\n";'
/services/apache2225

Если вам нужно получить текущий путь, например, pwd, вы можете использовать $ ENV {'PWD'}

root@srv apache # perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/apache

Спасибо.

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