我有一个像
这样的perl程序 $var= "hello world";
$var = -s $var;
print $var;
当我们打印$ var的值时,它会显示类似
的错误 Use of uninitialized value $var in print at line 3.
任何人都可以解释这是如何工作的。什么是-s呢?这是一个功能吗?我无法在perldoc中找到关于它的讽刺。
答案 0 :(得分:9)
-s
文件测试运算符接受文件名字符串或有效打开的文件句柄,并以字节为单位返回文件的大小。如果该文件不存在(我假设您没有名为hello world
的文件),则返回undef
还有一个不相关的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
不是文件的路径。