Печать текущего каталога с использованием Perl
У меня есть этот код для печати текущего каталога с помощью Perl:
use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";
Но он отображает имя файла моего script вместе с каталогом.
Вот так:
C:\Perl\duration.pl
Я хочу, чтобы он отображал только C:\Perl\
.
Как я могу это сделать?
Ответы
Ответ 1
Каждый из следующих фрагментов получает каталог скрипта, который не совпадает с текущим каталогом. Не ясно, какой вы хотите.
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;
Ответ 2
Чтобы получить текущий рабочий каталог (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.
Чтобы получить каталог, в котором находится ваш Perl файл, извне каталога:
use File::Basename qw();
my ($name, $path, $suffix) = File::Basename::fileparse($0);
print "$path\n";
Для получения дополнительной информации см. документацию File :: Basename.
Ответ 3
Использование:
print($ENV{'PWD'});
Но я думаю, что это не работает в Windows...
Ответ 4
Просто удалите '$ 0'
use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";
Ответ 5
Вот одно простое решение:
use Cwd;
my $cwd = cwd();
print "Current working directory: '$cwd()'";
Надеюсь, это поможет.
Ответ 6
Вы можете использовать FindBin
:
use FindBin '$RealBin';
print "$RealBin\n";
FindBin
- стандартный модуль, который устанавливается при установке Perl. Чтобы получить список стандартных прагматик и модулей, см. perldoc perlmodlib
.
Ответ 7
Я использовал мой script в каталогах с символическими ссылками.
script анализирует путь и выполняет команды в зависимости от пути.
Я столкнулся с правильным определением текущего пути.
Вот пример:
[email protected] apache # pwd
/services/apache
[email protected] apache # readlink -f .
/services/apache2225
Путь раскрытия модуля Cwd (аналог readlink -f)
http://perldoc.perl.org/Cwd.html
[email protected] apache # perl -e 'use Cwd; print cwd . "\n";'
/services/apache2225
Если вам нужно получить текущий путь, например pwd, вы можете использовать $ENV {'PWD'}
[email protected] apache # perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/apache
Спасибо.