我怎样才能让系统命令返回变量?

时间:2014-03-27 09:03:08

标签: perl return system

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

#!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;
}
}

但我的价值$ count我想不会得到系统命令显示给控制台的值。我查了一下它总是零。我怎么处理这个?

2 个答案:

答案 0 :(得分:2)

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

你可以试试这个:

#!/usr/bin/perl
use strict;
use warnings;

my @files=<*>;
print scalar(@files)," files\n";

此外,就可移植性而言,使用Perl的内置功能可以做得更好,因为某些(例如Windows)计算机上可能无法使用lswc

答案 1 :(得分:0)

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

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

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