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 opendir,perldoc -f readdir

  2. perldoc perlopentut

  3. perldoc -f glob

  4. perldoc perlfunc(查看用于测试文件的操作符。-x、、-d-f

于 2010-01-08T05:51:57.770 回答
2

您的问题是通过“系统”运行“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 回答