Perl:全局符号需要显式包名

时间:2015-06-15 08:23:30

标签: perl

import csv

reader = csv.reader(open(r"addresses.csv", "rb"), delimiter="\t")

for lCols in reader:
    try:
        if len(set([szIP.split(".")[3] for szIP in lCols])) == 1:
            print "\t".join(lCols)
    except:
        pass     # Skip non IP address formatted rows

我有一个Perl脚本(上面的代码是其中的一部分),它在测试服务器上运行良好,但在生产服务器上显示编译错误。错误是

&verify_se_linecount ( \@rows );

### Drop the modified file
open ( OUT, "> $RESOLVED_DIR\\$filenameonly" );

# Loop through each row in the EDI file
foreach my $row  ( @rows ) {
    print OUT $row . "$ROW_DELIM";  #  Line 164
}

close OUT;

变量在包含的Global symbol `$ROW_DELIM` requires explicit package name at <script_name> line 164 中声明,该包在此脚本中导入。它不会显示该包中使用的其他对象的任何错误。

2 个答案:

答案 0 :(得分:2)

无法看到您如何导出/导入该功能 - 它将成为以下之一:

  • 您已在包中使用my声明了该内容。
  • 您不会像想象中那样导出它
  • 你没有像你想象的那样导入它。

尝试$OtherPackageName::ROW_DELIM,看看是否有效。

答案 1 :(得分:0)

仅在主代码使用的模块中声明变量是不够的:您必须从该模块导出以使其在其他地方可见

如果您需要任何进一步的帮助,那么您必须显示该模块的内容,以及将其导入主代码的语句