0

実行時引数としてPerlスクリプトに渡されたパスからディレクトリ名を取得する必要があります。これが私が使用しているコードです:

$command ="cd $ARGV[0]";
system($command);

$command="dir /ad /b";
system($command);
@files=`$command`;

ただし、このPerlスクリプトを実行しているディレクトリ内のディレクトリ名が返されます。つまり、このPerlスクリプトにパスが渡されるターゲットディレクトリからディレクトリ名を取得するにはどうすればよいですか?

4

4 に答える 4

9

質問の投稿で何をしようとしているのかから判断する

$dir = $ARGV[0];
chdir($dir);
while(<*>){
 chomp;
 # check for directory;
 if ( -d $_ ) {
    print "$_\n" ;
 }
}

コマンドラインで

c:\test> perl myscript.pl c:\test

ディレクトリの一覧表示を行う方法は他にもあります。ドキュメントからこれらを参照してください

  1. perldoc -f opendirperldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc(ファイルをテストするための演算子を見てください。-x、、-dなど-f

于 2010-01-08T05:51:57.770 に答える
2

あなたの問題は、「system」を介して「cd」を実行しても、perlプロセスの作業ディレクトリが変更されないことです。これを行うには、「chdir」関数を使用します。

chdir($ARGV[0]);

$command="dir /ad /b";
system($command);
@files=`$command`;
于 2010-01-08T06:30:20.750 に答える
2

これも機能するはずです
$command = "dir /ad /b $ARGV[0]" ;

于 2010-01-08T06:39:31.293 に答える
0

File :: DosGlob(perl v5.5より前からコア)を使用して、/^\./に一致するファイルをスキップするなどの問題を回避します。

perl -MFile::DosGlob=glob -lwe "chdir 'test_dir'; print for grep {-d} <*>"
于 2010-01-09T15:36:39.360 に答える