相对绝对路径perl

Pau*_*aul 7 perl

以下目录设置:

/dira/dirb
/dira/dirb/myprog.pl
Run Code Online (Sandbox Code Playgroud)

/dira/dirb/testa/myfilesdir 包含以下文件

/dira/dirb/testa/myfilesdir/file1.txt
/dira/dirb/testa/myfilesdir/file2.txt
Run Code Online (Sandbox Code Playgroud)

目前的目录:

/dir/dirb

./myprog.pl  -p testa/myfilesdir
Run Code Online (Sandbox Code Playgroud)

循环浏览文件

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

$file_to_proc = file1.txt
$file_to_proc = file2.txt
Run Code Online (Sandbox Code Playgroud)

我想要的是什么

$myfile = /dira/dirb/testa/myfilesdir/file1.txt
$myfile = /dira/dirb/testa/myfilesdir/file2.txt
Run Code Online (Sandbox Code Playgroud)

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

Bir*_*rei 9

使用模块File::Spec.这是一个例子:

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

for ( @ARGV ) { 
    chomp;
    if ( -f $_ ) { 
        printf qq[%s\n], File::Spec->rel2abs( $_ );
    }   
}
Run Code Online (Sandbox Code Playgroud)

运行它像:

perl script.pl mydir/*
Run Code Online (Sandbox Code Playgroud)

它将打印文件的绝对路径.


更新更高效的计划.感谢TLP的建议.

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

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