【问题标题】:How can i get that system command's return to variable?我怎样才能让系统命令返回变量?
【发布时间】:2014-03-27 09:03:08
【问题描述】:

我有一个这样的示例代码:

#!usr/bin/perl -w
my $path = shift;
my $max_number_of_files = shift;
print("Changing directory to path $path $!" . "\n");
chdir($path) or die "Cant chdir to $path $!";
print("Counting files..." . "\n");
counting();
sub counting {
$counted = system("ls -1 | wc -l");
if ($counted > $max_number_of_files) {
print("You have more or equal files");
return 1;
}
else {
    print("$counted");
    print "You have less files";
    return 2;
}
}

但我的价值 $counted 我认为没有得到系统命令显示到控制台的值。我检查了它,它总是为零。我该如何处理?

【问题讨论】:

    标签: perl return system


    【解决方案1】:

    解析ls 的输出通常被认为是不好的做法,因为文件名可以包含换行符,这会使它们跨越多行,并且wc 会多次计算它们。

    你可以试试这个:

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    my @files=<*>;
    print scalar(@files)," files\n";
    

    此外,在可移植性方面,使用 Perl 的内置功能会做得更好,因为 lswc 在某些(例如 Windows)机器上可能不可用。

    【讨论】:

      【解决方案2】:

      system的返回值是你system调用的进程的退出码,不是进程的输出。

      要获取流程输出,请使用:

      chomp($counted = `ls -1 | wc -l`);
      

      【讨论】:

      • 无法修改 Counter.pl 第 9 行“ls -1 | wc -l;”附近标量分配中的标量 chomp它给出了这样的错误。 chomp 是做什么的?
      • @Hayra 糟糕,括号的位置不正确,现已修复。仅供参考,chomp 去掉了字符串末尾的换行符。
      猜你喜欢
      • 2019-06-13
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      相关资源
      最近更新 更多