我有这段使用Perl打印当前目录的代码:
use Cwd qw(abs_path);
my $path = abs_path($0);
print "$path\n";
但是它显示了我的脚本文件名以及目录。
像这样:
C:\Perl\duration.pl
我只想显示 C:\Perl\
。
我该怎么做?
要获取当前工作目录(在许多系统上使用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文档。
以下各段代码片段都可获取脚本所在目录,但与当前目录不同。不确定你需要哪种。
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;
use strict;
和use warnings;
。这并不重要。 - ikegami使用:
print($ENV{'PWD'});
但我认为它在Windows上不起作用...
只需删除“$0”即可。
use Cwd qw(abs_path);
my $path = abs_path();
print "$path\n";
这里有一个简单的解决方案:
use Cwd;
my $cwd = cwd();
print "Current working directory: '$cwd()'";
我希望这能帮到您。
FindBin
:use FindBin '$RealBin';
print "$RealBin\n";
FindBin
是一个标准模块,它在安装 Perl 时已经安装好了。要获取标准语法和模块的列表,请参阅perldoc perlmodlib
。
我在带有符号链接的目录中使用了我的脚本。 该脚本解析路径并根据路径执行命令。 我面临的问题是正确确定当前路径。
以下是示例:
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
root@srv apache # perl -e 'use Cwd; print $ENV{'PWD'}."\n";'
/services/apache
谢谢。