有人可以解释这个Perl代码片段吗?

时间:2011-03-17 15:38:16

标签: perl file append handler

这段小代码一直是我的一堆脚本中的主要内容,但我从其他人编写的另一个工作脚本中获取了语法,并根据我的需要对其进行了调整。我甚至不确定这里使用的语法是打开文件处理程序的最佳或最常用的方法。

代码是:

$fh = \*STAT_FILE;
open ($fh,">>".$stat_file) or die "Can't open $stat_file: $!\n";
my $print_flag = ( -z $stat_file );

我不完全理解上面代码的第一行和最后一行。具体而言,分别是\*STAT_FILE-z

我知道,在大多数情况下,第二行将打开一个文件以便追加或退出并抛出错误。但同样,我不明白$!在该行中的用途是什么。

有人可以用伪线逐行解释这个Perl代码吗?另外,如果上述方法不是首选方法,那么是什么?

提前致谢

2 个答案:

答案 0 :(得分:11)

在perl 5.6之前,文件句柄只能是globs(裸字)或对globs的引用(这是\ * STAT_FILE是)。此外,最好使用3参数open(See the docs。另请参阅perlopentut)。所以你现在可以做到:

open(my $fh, ">>", $stat_file) or die "Failed to open $stat_file: $!";

忘了\ * STAT_FILE。

-z是one of the file test functions(并将文件名或文件句柄作为参数)并测试文件是否为零。

$!是Special Variables之一并包含最新的系统错误消息(在这种情况下,为什么您无法打开文件,可能是权限问题,或者文件路径中的目录不存在等)。

你应该学习使用perldoc,所有这些都在perldoc中:

perldoc perlfunc(特别是perldoc -f open和perldoc -f -X)

perldoc perlvar

答案 1 :(得分:3)

第一行为变量赋予typeglob(fullsymbol表条目)STAT_FILE的引用(反斜杠符号)。这是一个非常惯用的perl构造,用于传递文件句柄,只是为了命名它,在Larry Wall“Programming perl”中。 $!变量包含操作系统重新生成的错误消息。

所以整个意思是:

  • 第1行。将$ fh变量放入文件句柄;
  • 第2行。打开以附加报告系统消息错误的文件,如果发生故障;
  • 第3行。如果文件长度为零,则设置标志变量警告