我正在尝试一个可以计算命令行参数中给出的文件大小的示例程序。当我在变量中存储文件名时,它会正确地给出大小,但是当从命令行参数中获取文件名时不会输出结果。
#! /usr/bin/perl
use File::stat;
while(<>){
if(($_ cmp "\n") == 0){
exit 0;
}
else{
my $file_size = stat($_)->size; # $filesize = s $_;
print $file_size;
}
}
使用文件测试运算符-s
时没有输出,使用stat模块时出错:
Unsuccessful stat on filename containing newline at /usr/share/perl/5.10/File/stat.pm line 49, <> line 1.
Can't call method "size" on an undefined value at 2.pl line 17, <> line 1.
1.txt是我给出的文件名作为输入。
答案 0 :(得分:7)
#!/usr/bin/perl
for (@ARGV){
my $file_size = -s $_;
print $file_size;
}
或类似的cmd oneliner,
perl -E 'say "$_, size: ", -s for @ARGV' *
答案 1 :(得分:0)
#!/usr/bin/perl -w
$filename = '/path/to/your/file.doc';
$filesize = -s $filename;
print $filesize;
够简单吧?首先,创建一个包含要测试的文件路径的字符串,然后在其上使用-s
文件测试运算符。您可以使用简单的方法将此缩短为一行:
print -s '/path/to/your/file.doc';
另外,请记住,如果文件大于零字节,这将始终返回true,但如果文件大小为零,则将返回false。它可以方便快捷地检查零字节文件。