在同一个包中使用跨文件的常量

时间:2017-12-11 10:04:15

标签: perl package constants

我将生产代码与两个具有相同package的单独文件中的测试代码分开。这可能有点阴暗,但它一直运作良好,因为我避免了导出和导入子程序的麻烦。

我使用constant

遇到了问题

example.pl

#! /usr/bin/perl

use strict;
use warnings;

package A;

1;

use constant WORLD => "WORLD\n";

sub helloWorld {
   print STDERR "Hello, World\n";
}

sub helloAll {
   print STDERR "Hello, All\n";
}

test.pl

use strict;
use warnings;

package A;

use lib '.';
require 'example.pl';

helloWorld();
helloAll();
print "Hello, ", A->WORLD;

输出

./test.pl
Hello, World
Hello, All
Hello, WORLD

这一切看起来都不错,但如果我尝试将常量称为WORLDA::WORLD而不是A->WORLD,我会收到错误。

  

./test.pl第13行使用“strict subs”时不允许使用Bareword“A :: WORLD”。

我想理解为什么,因为常量本质上是子程序,其余的子程序工作正常。

1 个答案:

答案 0 :(得分:5)

require在运行时发生,因此在编译时不知道常量。将需求包装在BEGIN块中:

BEGIN { require 'example.pl' }

但是:您应该使用模块并将其包含在use中,而不是需要脚本。您对package A的使用表明您不熟悉perlmodExporter,因此请阅读文档并尝试理解并将其应用到您的工作中。