3

我需要获取当前目录中的文件和子目录列表,然后使用 perl 脚本执行必要的操作。为此必须使用以下命令:ls -F | perl myfile.pl. 问题是如何在 perl 脚本中获取 ls 命令的输出。任何帮助表示赞赏。

4

5 回答 5

2

这很简单,只需阅读 perl 脚本的标准输入:

while(<STDIN>) {
    print "---> $_";  # or whatever you need
}
于 2013-03-09T21:35:46.070 回答
2

如果您编写的不是繁重的单行 perl 脚本,则可以使用“-n”管道标志,这样您就不需要循环输入:

ls -F | perl -ne "print $_;"
于 2013-11-17T10:35:41.847 回答
1

如果您需要将目录的内容交给 Perl 脚本,最好将文件名作为参数传递。

perl myscript.pl *

然后...

for my $file (@ARGV) {
    ...
}

这避免了解析输出,ls -F使您的代码更简单、更快、更健壮和可移植。

可以使用文件测试操作符在 Perl 中告知文件的类型。

for my $file (@ARGV) {
    if( -l $file ) {
        ...do something with a symbolic link...
    }
    elsif( -d $file ) {
        ...do something with a directory...
    }
    else {
        ...regular file...
    }
}
于 2013-03-09T21:52:02.973 回答
0

perl运行命令并在脚本内处理其输出。这与管道的行为相同。

#!/usr/bin/env perl

use warnings;
use strict;

open my $ls, '-|' , 'ls -F' or die;

while ( <$ls> ) { 
    ## Process each line.
}
于 2013-03-09T21:42:52.917 回答
0

ls -F | perl myfile.pl -

我们只需要脚本名称后的“-”参数。顺便说一句,使用“*”代替“-”不起作用。

于 2015-11-18T14:15:23.980 回答