我有一堆Perl文件,它们接受一些文件名常量。我想在一个单独的文件中定义它们 - 类似于C中的头文件。在Perl中执行此操作的最佳/最标准方法是什么?
答案 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放在包中,并以类似的方式引用它们。