以下目录设置:
/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),但它正在使用当前目录。我无法使用当前目录,因为输入可能是相对路径或绝对路径。
答案 0 :(得分:9)
使用模块File::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";
}
}