perl中的文件句柄是全局的吗?

时间:2012-09-27 08:39:31

标签: perl

#!/usr/local/bin/perl
sub trial
{
    open (LOGFILE, 'C:\Users\out.txt');
    trial();
}
trial();

请忽略它会进入无限循环。

文件句柄LOGFILE是本地方法还是私有方法? 如果不是,我该如何将其设为私有/本地? 我知道我的。但我不知道如何在文件句柄上使用它。

2 个答案:

答案 0 :(得分:10)

这些文件句柄是全局的,因为它们是typeglobs。这有时会导致非常糟糕的意外,因为您可能会意外地覆盖您正在使用的某个模块内部定义的文件句柄。

如果您需要词汇文件句柄,请使用my定义它们:

open my $fh, '<', 'C:\Users\out.txt';

另见:

答案 1 :(得分:4)

词法文件句柄只是标准的my标量。请参阅the perldoc for open中的示例。

open (my $logfile, 'C:\Users\out.txt');

一般来说,open的三个参数形式也是首选:

open (my $logfile, '<', 'C:\Users\out.txt');