2011-03-17 173 views
1

这段小小的代码已经成为我的一些脚本中的一个主要部分,但是我从其他人编写的另一个工作脚本中提取了语法,并将其调整为适合我的需要。我甚至不确定这里使用的语法是打开文件处理程序的最好还是最常用的方法。有人可以解释这个Perl代码片段吗?

的代码是:

$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代码吗?另外,如果上述方法不是首选方法,那么是什么?

在此先感谢

+0

如果你不使用$ print_flag任何地方,然后删除该行

  • 线3.设置一个标志变量警告。 – runrig 2011-03-18 14:39:36

  • 回答

    11

    perl的5.6之前,文件句柄只能是水珠(裸字)或水珠引用(这是STAT_FILE是什么\ *)。此外,最好使用3参数打开(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开放和的perldoc -f -X)

    的perldoc perlvar

    +0

    打开(fh,“>> $ stat_file)或死”无法打开$ stat_file:$!“;与当前一样正常工作(但我认为我的评论正在运行perl的多种方式原理) – scrappedcola 2011-03-17 16:02:35

    +1

    @runrig:”你应该学会使用perldoc,所有这些都在perldoc中:“只有在你已经知道perl文档页面名称的(并不总是那么明显)名字:)好,让你知道这些重要的东西,不过。:) – 2011-03-17 16:29:42

    +0

    @runrig - 感谢信息和代码清理。@robert P - the这个问题的原因正是为什么这个问题在这里结束了,我不知道该在文档中寻找什么。 – CheeseConQueso 2011-03-17 17:12:21

    3

    第一行向该变量分配一个对typeglob(全符号表项)STAT_FILE的引用(反斜杠符号)。在Larry Wall的“Programming perl”中,这是一个相当习惯的perl构造,用于传递文件句柄,只是为了说明它。 $!变量包含操作系统重新启动的错误消息。

    所以整个意思是:

    • 线1放在$ FH可变文件句柄;
    • 第2行。用于在发生故障时打开报告系统消息错误的文件。如果文件长度为零
    相关问题