有人可以向我解释一下" 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的作用。
答案 0 :(得分:2)
这是perl file handle:
打开文件由EXPR指定的文件,并将其与FILEHANDLE关联。
打开文件进行阅读的简单示例:
open(my $fh, "<", "input.txt")
or die "cannot open < input.txt: $!";
您的错误似乎是您需要将箭头作为第二个参数传递,将文件名称作为第三个参数传递,而不是两个都在同一个字符串中。
答案 1 :(得分:2)
L
是自由选择的文件句柄名称,引用文件$logfile
,该文件正在打开以进行书写(>
);
然后在后来的L
和print
调用中使用close
来引用打开的文件。
正如其他人所说,open ( L , ">$logfile" )
在两个方面是过时的语法:
L
)会创建全局变量 [1] ,因此现在首选的方法是< strong>使用本地变量:
open(my $fh, ...); # local var. $fh receives the file handle
$
- 例如close $fh
。<
用于阅读,>
用于写入,...)和文件名为组合,单个参数已弃用;现在,首选首先指定模式,然后将文件名作为单独的参数:
open(my $fh, '>', $logfile)
[1]它是一个全局定义的符号,但不是这样的变量,因为它只能用于需要文件句柄的情况。您以后不能将L
文件句柄称为$L
。
文档链接: