全局符号“$ i”需要显式包名称

时间:2014-05-25 10:43:39

标签: arrays perl variables perl-module

我有3个数组,然后我打开一个txt文件,其中包含firstname,lastname和email(单独包含一些html代码,如下所示)

<first>Mike<first>
<sec>stone<sec>
<email>mike@rt.com<email>

我首先计算文件中的行,然后我解析这个文件并将第一个,最后一个和电子邮件放在3个不同的数组中,然后从每个数组元素中删除htmls标记。但是我面临的问题就像全局符号在删除html标签时在其中一个变量中需要显式包名,即使我已经用我的声明了 这是片段

    if ( $ct <= $end ) {
        my $i = 0;
    }
    $ct++;
}

my $j = 0;
my $l = @lines;

while ( $j < $l ) {
      if ( $lines[$j] =~ m/@/ ) {
          50 $line[$i] = $lines[$j];

          51 $j = $j - 3;
          52 $last[$i] = $lines[$j];
          53 $j++;
          54 $first[$i] = $lines[$j];
          55 $i++;
          56 $j = $j + 7;
          57;
      }
      else 58 {
          59 $j++;
          60
      }

我得到的错误就像

Global symbol "$i" requires explicit package name at pqwe.pl line 50.
Global symbol "$i" requires explicit package name at pqwe.pl line 53.
Global symbol "$i" requires explicit package name at pqwe.pl line 55.
Global symbol "$i" requires explicit package name at pqwe.pl line 56.
Execution of pqwe.pl aborted due to compilation errors.

1 个答案:

答案 0 :(得分:2)

您需要将$i声明移出if块。检查以下代码:

#!/usr/bin/perl
use strict;
use warnings;

my $var = 1;

if ( $var eq 1)
{
    my $i = 100;
}

print $i."\n";

输出:

# perl test.pl 
Global symbol "$i" requires explicit package name at test.pl line 12.
Execution of test.pl aborted due to compilation errors.

现在,我将$i声明移出if块:

#!/usr/bin/perl
use strict;
use warnings;

my $i;
my $var = 1;

if ( $var eq 1)
{
     $i = 100;
}

print $i."\n";

输出:

# perl test.pl 
100

在perl文档中阅读有关它的更多信息:http://perldoc.perl.org/perlintro.html#Variable-scopinghttp://perlmaven.com/scope-of-variables-in-perl