【发布时间】:2010-06-16 20:44:15
【问题描述】:
我正在尝试使用constant pragma 在 Perl 中定义常量:
use constant {
FOO => "bar",
BAR => "foo"
};
我遇到了一些麻烦,希望有一个标准的方法来处理它。
首先...
我正在为 Subversion 定义一个钩子脚本。为简单起见,我想要一个文件,其中我使用的类(包)与我的实际脚本在同一个文件中。
这个包的大部分内容都会涉及到常量:
print "This is my program";
package MyClass;
use constant {
FOO => "bar"
};
sub new { ... }
我希望我的主程序可以访问我的常量 FOO。我想这样做而不必将其称为MyClass::FOO。通常,当包是一个单独的文件时,我可以在我的主程序中这样做:
use MyClass qw(FOO);
但是,由于我的课程和程序是一个文件,我不能这样做。让我的主程序能够访问我的类中定义的常量的最佳方式是什么?
第二期……
我想使用常量值作为哈希键:
$myHash{FOO} = "bar";
问题在于%myHash 将文字字符串FOO 作为键而不是常量的值。当我做这样的事情时,这会导致问题:
if (defined $myHash{FOO}) {
print "Key " . FOO . " does exist!\n";
}
我可以强制上下文:
if (defined $myHash{"" . FOO . ""}) {
我可以加括号:
if (defined $myHash{FOO()}) {
或者,我可以使用临时变量:
my $foo = FOO;
if (defined $myHash{$foo}) {
这些都不是处理这个问题的好方法。那么,最好的方法是什么?我错过了一种方法吗?
顺便说一句,我不想使用Readonly::Scalar,因为它是 1)。慢,和2)。不是标准 Perl 包的一部分。我想定义我的钩子不需要额外的 Perl 包并且尽可能简单地工作。
【问题讨论】: