【发布时间】:2011-01-12 08:39:46
【问题描述】:
我在 Perl 中声明了一组常量:
use constant C1 => 111;
use constant C2 => 222;
..
use constant C9 => 999;
my $which_constant = "C2";
我如何构造一个基于$which_constant 的 Perl 表达式,派生一个以该变量的值命名的常量的值 - 例如“222”。
请注意,我无法更改上述任何条件 - 它们是对真实场景的简化:我有一个模块(我无法控制),从该模块中导入这些常量。常量之一的名称由用户从命令行提供。我需要访问适当的常量值。
我一直在用头撞墙(主要是围绕各种奇怪的 glob 构造),但它们都不起作用。
附:如果解决方案访问其本机模块中的常量——比如My::Constants::C2(不需要导入它们),更好,但不是必需的——我可以使用My::Constants->import($which_constant)轻松地将正确的常量导入main::。是的,最重要的是,默认情况下不会导出 te 常量,因此需要显式的 import() 调用。
我尝试过的一些事情:
main::$which_constant- 语法错误main::${which_constant}- 语法错误${*$which_constant}- 返回空值*$which_constant- 返回“*main::C2”${*${*which_constant}}- 空
【问题讨论】:
-
如果您要更改此模块,search.cpan.org/perldoc?Readonly 或 search.cpan.org/perldoc?Attribute::Constant 似乎更适合这种用法。
-
模块由软件工程团队控制(更准确地说,是从包含常量列表的数据库后端自动生成)。他们没有带宽容量来处理这么小的/微不足道的事情,并且不会让团队外部的人在没有主要业务需要证明变更风险的情况下弄乱他们的代码。他们是在大型金融机构工作时的休息时间。
标签: perl constants symbol-table