8

次のディレクトリ設定:

/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)を試しましたが、現在のディレクトリを使用しています。入力が相対パスまたは絶対パスである可能性があるため、現在のディレクトリを使用できません。

4

1 に答える 1

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";
    }   
}
于 2012-04-27T13:30:59.167 に答える