Perl中-s的含义是什么?它是如何工作的?

时间:2016-04-24 12:46:08

标签: perl

我有一个像

这样的perl程序
  $var= "hello world";
  $var = -s $var;
  print $var;

当我们打印$ var的值时,它会显示类似

的错误
     Use of uninitialized value $var in print at line 3.

任何人都可以解释这是如何工作的。什么是-s呢?这是一个功能吗?我无法在perldoc中找到关于它的讽刺。

3 个答案:

答案 0 :(得分:9)

-s文件测试运算符接受文件名字符串或有效打开的文件句柄,并以字节为单位返回文件的大小。如果该文件不存在(我假设您没有名为hello world的文件),则返回undef

记录在perldoc -f -X

还有一个不相关的perl命令行开关-s。它记录在perldoc perlrun中。这是您找到的文档,但在Perl程序中使用-s无关紧要

答案 1 :(得分:4)

-s是Perl中可用的众多文件测试之一。此特定测试以字节为单位返回文件大小,因此可用于检查文件是否为空。

在您的示例代码中,测试返回undef,因为它找不到名为hello world的文件。

您可以在此处阅读有关Perl中文件测试的更多信息:http://perldoc.perl.org/functions/-X.html

答案 2 :(得分:0)

-s-X中记载的奇怪命名函数。但是,尽管名称中有破折号,-s就像任何其他函数一样。

-s返回作为参数提供的文件的大小。如果出错,则返回undef并设置$!

要查明您获得的错误,请检查尺寸是否未定义。

defined( my $size = -s $qfn )
   or die("Can't stat \"$qfn\": $!\n");

在这种情况下,肯定是因为hello world不是文件的路径。