Perl - 如何将完整的目录路径名传递给perl脚本

时间:2014-10-03 20:31:54

标签: perl

我有一个perl脚本,它从“/ root / pkt / sw / se / tool”路径执行,需要脚本中的完整目录路径。

请告诉我如何获得完整的路径?

sample.pl

 our ($tool_dir);

 use strict;
 use warnings;
 BEGIN {
   $tool_dir = $0;
   my $home_path = $tool_dir
   $home_path =~ s|\w*/\w*/\w*$||;
   my $target_path ="obj/Linux-i686/usr/share/ddlc/lib";
   $lib_dir = "$home_path$target_path";
   unshift(@INC, $lib_dir);
 }

我正在从“pkt / sw / se / tool”路径执行此脚本,但在这里我只得到“pkt / sw / se / tool”而不是“/ root / pkt / sw / se / tool”< / p>

我的perl脚本位于/root/pkt/sw/se/tools/sample.pl

3 个答案:

答案 0 :(得分:2)

您可以使用CWD模块(http://perldoc.perl.org/Cwd.html)(从该页面获取代码)

use Cwd;
my $dir = getcwd;
use Cwd 'abs_path';
my $abs_path = abs_path($file);

或者您可以执行pwd命令

$cwd = `pwd`;

如果您只想要目录,而不是完整路径,可以在Print current directory using Perl

查看现有答案

答案 1 :(得分:1)

使用已经提到的其中一个模块,绝不使用反引号 - 除非您完全理解这样做的风险和含义。如果你想运行'pwd',那么可以通过类似IPC :: Run3的方式调用它。

示例:

#!/usr/bin/perl

use strict;
use warnings;

use Cwd;
use IPC::Run3;

# CWD
my $working_dir_cwd = getcwd; 
print "Woring Dir (Cwd): $working_dir_cwd\n";

# IPC::Run3
my ($in, $out, $err);
my @command = qw/pwd/;

run3 \@command, $in, \$out, \$err or die $?;

print "Working Dir (pwd): $out\n";

答案 2 :(得分:0)

您可以使用FindBin找到原始perl脚本的目录。

use FindBin;
use lib "$FindBin::Bin/../../../obj/Linux-i686/usr/share/ddlc/lib";