0

我正在尝试一个示例程序,该程序可以计算命令行参数中给出的文件大小。当我将文件名存储在变量中时,它会正确给出大小,但从命令行参数获取文件名时不会输出结果。

#! /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 是我作为输入提供的文件名。

4

2 回答 2

7
#!/usr/bin/perl 

for (@ARGV){
  my $file_size = -s $_;
  print $file_size;
}

或类似的 cmd oneliner,

perl -E 'say "$_, size: ", -s for @ARGV' *
于 2013-08-16T08:23:30.773 回答
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。它为检查零字节文件提供了一种方便快捷的方法。

于 2013-08-16T08:31:41.503 回答