如何在Perl中的单独文件中定义常量?

时间:2009-09-20 14:07:41

标签: perl constants

我有一堆Perl文件,它们接受一些文件名常量。我想在一个单独的文件中定义它们 - 类似于C中的头文件。在Perl中执行此操作的最佳/最标准方法是什么?

4 个答案:

答案 0 :(得分:16)

Perl中没有与C头文件等效的内容。要声明和定义全局常量,可以使用define pragma。虽然界面看起来很合理,但我没有这个模块的经验。

另一方面,您可以编写一个模块来定义常量,并使用use将它们导入模块。例如:

package MyConstants;

use strict; use warnings;

use Exporter qw( import );
use Const::Fast;

our @EXPORT = qw();
our @EXPORT_OK = qw( $X $Y );

const our $X => 'this is X';
const our $Y => 'this is Y';

__PACKAGE__;
__END__

然后您可以按如下方式使用此模块:

#!/usr/bin/perl

use strict; use warnings;

use MyConstants qw( $X );

print "$X\n";
print "$MyConstants::Y\n";

如果您可以使用完全限定的变量名称(例如$MyConstants::Y),则根本不需要Exporter

另外,请确保您导出的变量在其他地方无法修改(请参阅Exporter文档中的注意事项)。

当然,您也可以使用constant.pm定义常量。使用这些常量可能会更快,但如果你需要在字符串中插入它们,它们就会很笨拙。

答案 1 :(得分:7)

我们通常使用模块名称Constants来执行此操作。类似的东西:

package MyPackage::Constants;

our $DIR = "/home/chriss";
our $MAX_FILES = 5;

1;

然后,使用它:

package MyPackage;
use MyPackage::Constants;

open(my $fh, ">", $MyPackage::Constants::DIR . "/file");

如果您不想一直引用该包,可以使用Exporter并输入您想要的所有符号。

答案 2 :(得分:5)

这听起来像配置设置,最好放在您使用各种CPAN模块之一解析的配置文件中,例如Config::Any

配置是数据,IMO不应该在您的代码中。

答案 3 :(得分:-2)

一种方法是将它们写为perl模块,随后可以包含“require”或“use”。你可以这样写你的文件 - 给它一个.pm扩展名(例如,myFabulousPackage.pm)

package myFabulousPackage;

$someSetting=45;
$otherSetting='Fish';

1;

然后在你的perl脚本中,这将包含该文件,然后引用$ otherSetting:

#!/usr/bin/perl

use myFabulousPackage;

print $myFabulousPackage::otherSetting;

这只是一个非常简单的视图,您可以使用软件包/模块做什么,但是对于您需要的内容,这可能是实现它的最简单方法。类似地,您也可以将sub放在包中,并以类似的方式引用它们。