Perl 相对绝对路径

Perl 相对绝对路径,perl,Perl,以下目录设置: /dira/dirb /dira/dirb/myprog.pl /dira/dirb/testa/myfilesdir包含以下文件 /dira/dirb/testa/myfilesdir/file1.txt /dira/dirb/testa/myfilesdir/file2.txt 现任董事: /dir/dirb ./myprog.pl -p testa/myfilesdir 循环浏览文件 while (my $file_to_proc = readdir(DIR))

以下目录设置:

/dira/dirb
/dira/dirb/myprog.pl
/dira/dirb/testa/myfilesdir
包含以下文件

/dira/dirb/testa/myfilesdir/file1.txt
/dira/dirb/testa/myfilesdir/file2.txt
现任董事:

/dir/dirb

./myprog.pl  -p testa/myfilesdir
循环浏览文件

while (my $file_to_proc = readdir(DIR)) {
...

$file_to_proc = file1.txt
$file_to_proc = file2.txt
我想要的是

$myfile = /dira/dirb/testa/myfilesdir/file1.txt
$myfile = /dira/dirb/testa/myfilesdir/file2.txt

尝试了几个不同的perl模块(CWD rel2abs),但它使用的是当前目录。我无法使用当前目录,因为输入可以是相对路径或绝对路径。

使用模块
文件::Spec
。这里有一个例子:

use warnings;
use strict;
use File::Spec;

for ( @ARGV ) { 
    chomp;
    if ( -f $_ ) { 
        printf qq[%s\n], File::Spec->rel2abs( $_ );
    }   
}
像这样运行:

perl script.pl mydir/*
它将打印文件的绝对路径


更新了一个更高效的程序。感谢TLP的建议

use warnings;
use strict;
use File::Spec;

for ( @ARGV ) { 
    if ( -f ) {
        print File::Spec->rel2abs( $_ ), "\n";
    }   
}

chomp
在这里似乎是多余的<如果省略了参数,则code>-f将测试
$\u
,这也使得
$\u
冗余。我还认为这是对
printf
@TLP的重复使用:谢谢。我已经用你的建议更新了答案。现在好多了,但我离开了原来的程序我更改了程序添加使用的文件::Basename文件::查找和组合。帮助我找到新模块。谢谢