全局符号需要显式包

时间:2013-05-16 18:23:45

标签: perl file

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

  

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

#!/usr/bin/perl

use strict;
use warnings;

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

2 个答案:

答案 0 :(得分:2)

您希望print @tab;代替print @$tab;

答案 1 :(得分:1)

您已正确使用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;
}