gpt4 book ai didi

perl - 如何在 Perl 中访问名称包含在变量中的常量?

转载 作者:行者123 更新时间:2023-12-03 18:11:37 25 4
gpt4 key购买 nike

我在 Perl 中声明了一组常量:

   use constant C1 => 111;
use constant C2 => 222;
..
use constant C9 => 999;
my $which_constant = "C2";

如何构建基于 $which_constant 的 Perl 表达式, 派生一个以此变量的值命名的常量的值 - 例如“222”。

请注意,我无法更改上述任何条件 - 它们是对真实场景的简化:我有一个模块(我无法控制),这些常量是从中导入的。常量之一的名称由用户从命令行提供。我需要访问适当的常量值。

我一直在用头撞墙(主要是围绕各种奇怪的 glob 构造),但它们都不起作用。

附言如果解决方案访问其 native 模块中的常量 - 比如说 My::Constants::C2 (不需要导入它们),甚至更好,但不是必需的 - 我可以将正确的常量导入 main::轻松使用 My::Constants->import($which_constant) .是的,最重要的是,默认情况下不会导出 te 常量,因此需要显式的 import() 调用。

我尝试过的一些事情:
  • main::$which_constant - 语法错误
  • main::${which_constant} - 语法错误
  • ${*$which_constant} - 返回空值
  • *$which_constant - 返回 "*main::C2"
  • ${*${*which_constant}} - 空
  • 最佳答案

    constant.pm 定义的常量只是子程序。如果字符串中有常量的名称,则可以使用方法调用语法:

    #!/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 );

    这样,如果您尝试使用未定义的常量,则会出现错误。

    关于perl - 如何在 Perl 中访问名称包含在变量中的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2187682/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com