I have a sample code like this :

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

But my value $counted i think not get the value which system command show to console. I checked it and it is always zero. How can i handle this ?

有帮助吗?

解决方案 2

The return value of system is the exit code of the process that you called by system, not the output of the process.

To get the process output, use:

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

其他提示

It is generally considered bad practice to parse the output of ls because filenames can contain newlines which make them span more than one line and and wc will count them more than once.

You could try this:

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

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

Also, in terms of portability, you will do better using Perl's built-in features, since ls and wc may not be available on some (e.g. Windows) machines.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top