【问题标题】:Are filehandles in perl global?perl 中的文件句柄是全局的吗?
【发布时间】:2012-09-27 17:54:13
【问题描述】:
#!/usr/local/bin/perl
sub trial
{
    open (LOGFILE, 'C:\Users\out.txt');
    trial();
}
trial();

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

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

【问题讨论】:

  • 这些是文件句柄,不是文件处理程序

标签: perl


【解决方案1】:

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

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

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

另见:

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2015-04-13
      • 2012-08-14
      相关资源
      最近更新 更多