我有一组用 Perl 声明的常量:
use constant C1 => 111;
use constant C2 => 222;
..
use constant C9 => 999;
my $which_constant = "C2";
我如何构造一个 Perl 表达式,它基于$which_constant
,导出用该变量的值命名的常量的值 - 例如“222”。
请注意,我无法更改上述任何条件 - 它们是真实场景的简化:我有一个模块(我无法控制)从中导入这些常量。常量之一的名称由用户从命令行提供。我需要访问适当的常量值。
我一直在用头撞墙(主要是围绕各种奇怪的全局结构),但它们都不起作用。
附:如果解决方案访问其本机模块内的常量 - 例如My::Constants::C2
(不需要导入它们),甚至更好,但不是必需的 - 我可以将正确的常量导入到main::
轻松使用My::Constants->import($which_constant)
。是的,最重要的是,默认情况下不会导出常量,这需要显式 import() 调用。
我尝试过的一些事情:
main::$which_constant
- 语法错误
main::${which_constant}
- 语法错误
${*$which_constant}
- 返回空值
*$which_constant
- 返回“*main::C2”
${*${*which_constant}}
- empty
常数定义为constant.pm http://search.cpan.org/perldoc/constant.html只是子程序。如果字符串中有常量的名称,则可以使用方法调用语法:
#!/usr/bin/perl -l
use strict; use warnings;
use constant C1 => 111;
use constant C2 => 222;
print __PACKAGE__->$_ for qw( C1 C2 );
# or print main->$_ for qw( C1 C2 );
这样,如果您尝试使用未定义的常量,您将收到错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)