【问题标题】:Global symbol requires explicit package [closed]全局符号需要显式包[关闭]
【发布时间】:2013-05-16 18:23:44
【问题描述】:

我做错了什么?打开的文件不为空。但我还是得到了

全局符号“$tabbb”需要在 mix.pl 第 8 行显示包名。

#!/usr/bin/perl

use strict;
use warnings;

open FILE, "<", "seeds.data" or die $!;
my @tab = <FILE>;
print @$tab;

【问题讨论】:

  • 这真的是错误信息吗?没有名为 $tabbb 的变量。
  • 不要使用裸字文件句柄。请改用my $fh
  • 抱歉,错误是从旧的“版本”复制而来的
  • 不幸的是文件是空的,这是一个问题......

标签: perl file


【解决方案1】:

你想要print @tab; 而不是print @$tab;

【讨论】:

    【解决方案2】:

    你已经正确地使用了use strictuse warnings,其中一个好处是如果你使用了一个你没有声明的变量,Perl 会警告你。错误信息

    全局符号“$tabbb”需要在 mix.pl 第 8 行显示包名。

    是说,因为您使用的是strict,所以您不能引用尚未声明的名为$tabbb 的变量。你的线路

    print @$tab;
    

    将标量变量 $tab 取消引用为数组,并且由于您尚未声明 $tab 我想这就是错误消息的含义。但是你确实有一个数组变量@tab,其中包含你打开的文件的内容,所以写

    print @tab;
    

    改为。

    最重要的是,逐行读取文件并写入

    use strict;
    use warnings;
    
    open my $fh, '<', 'seeds.data' or die $!;
    while (<$fh>) {
      print;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 2013-12-31
      • 2011-03-09
      • 2014-07-14
      • 1970-01-01
      相关资源
      最近更新 更多