我有一个这样的示例代码:
#!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我想不会得到系统命令显示给控制台的值。我查了一下它总是零。我怎么处理这个?
答案 0 :(得分:2)
通常认为解析ls
的输出是不好的做法,因为文件名可以包含换行符,这些换行符会使它们跨越多行,wc
会对它们进行多次计数。
你可以试试这个:
#!/usr/bin/perl
use strict;
use warnings;
my @files=<*>;
print scalar(@files)," files\n";
此外,就可移植性而言,使用Perl的内置功能可以做得更好,因为某些(例如Windows)计算机上可能无法使用ls
和wc
。
答案 1 :(得分:0)
system
的返回值是由system
调用的进程的退出代码,而不是进程的输出。
要获得流程输出,请使用:
chomp($counted = `ls -1 | wc -l`);