“open(L,”> $ logfile“)”中的L是什么?

时间:2015-04-19 15:10:07

标签: perl

有人可以向我解释一下" L"在下面的代码中?

open ( L , ">$logfile" )
    or die "Can't create logfile \"$logfile\": $!\n" ;
print L "CMD: $cmd\n" , "=" x 78 , "\n" ;
close L ;

打开它是一个常用词("打开"),搜索它会更加困难。

此代码是记录ssh会话的脚本的一部分。您可以在此处获取完整代码:http://pastebin.com/ZZbBj4tU

我的实际问题是,当我尝试运行此脚本时,我得到一个未找到的"文件"这段代码中的错误。我认为它是在尝试首先创建文件时尝试打开现有日志。但为了解决这个问题,我需要先了解这个L的作用。

2 个答案:

答案 0 :(得分:2)

这是perl file handle

  

打开文件由EXPR指定的文件,并将其与FILEHANDLE关联。

     

打开文件进行阅读的简单示例:

open(my $fh, "<", "input.txt") 
    or die "cannot open < input.txt: $!";

您的错误似乎是您需要将箭头作为第二个参数传递,将文件名称作为第三个参数传递,而不是两个都在同一个字符串中。

答案 1 :(得分:2)

L自由选择的文件句柄名称,引用文件$logfile,该文件正在打开以进行书写(>);
然后在后来的Lprint调用中使用close来引用打开的文件。

正如其他人所说,open ( L , ">$logfile" )在两个方面是过时的语法

  • 使用 bareword (例如L)会创建全局变量 [1] ,因此现在首选的方法是< strong>使用本地变量:
    • open(my $fh, ...); # local var. $fh receives the file handle
    • 请注意,您可以在以后的调用中使用通常的变量语法 - 前缀$ - 例如close $fh
  • 指定文件模式<用于阅读,>用于写入,...)和文件名为组合,单个参数已弃用;现在,首选首先指定模式,然后将文件名作为单独的参数
    • open(my $fh, '>', $logfile)

[1]它是一个全局定义的符号,但不是这样的变量,因为它只能用于需要文件句柄的情况。您以后不能L文件句柄称为$L


文档链接: