perl - 在 Perl 的严格模式下使用动态生成的变量名

标签 perl variables strict

这个问题在这里已经有了答案:





How can I use a variable as a variable name in Perl?

(3 个回答)


5年前关闭。




基本上,我想获取在动态生成的字符串中命名的变量的内容,但是在严格模式下完成此操作的所有努力都失败了。有几篇关于类似问题的帖子,但似乎没有一个对我有用的解决方案。

这就是我想要做的:

# Fields:
$q1 = "ex. data 1";
$q2 = "ex. data 2";
$q3 = "ex. data 3";
$q4 = "ex. data 4";
$q5 = "ex. data 5";

# retrieve the desired field name.  q1, q2, q3, q4, or q5.
$field_name = fetch_the_desired_field_name();

# fetch the contents of the named field.  ex. data 1, ex. data 2, etc.
$contents_of_desired_field = $$field_name;

print $contents_of_desired_field;

有没有办法在严格模式下做到这一点?在关于类似问题的其他帖子中,人们说散列是答案,但我似乎不太明白如何用散列来做到这一点。
不用说,这是一个非常简化的例子。在实际代码中,有 115 个可能的字段名称,全部从数据库中提取,内容不可预测。

最佳答案

要使用哈希执行此操作:

店铺:

$myHash{q3} = "ex. data 3";

取回:
$result = $myHash{q3};

这有多种好处,例如:
  • 满足“严格使用”;
  • 您可以通过 keys %myHash 遍历所有字段名称。
  • 由于字段名称是最后一点的列表,如果需要,您可以对它们执行任何其他列表操作( mapgrep )等...
  • 例如,要仅获取字段名称为“q[1-5]”形式的值,您可以执行以下操作:
    @subset = @myHash{ grep m/q[1-5]/ keys %myHash }; # Use a slice @{} operator.
    
  • 大多数数据库 API(例如 DBI)都有调用,当从表中查询行时,这些调用将自动返回这种确切格式的散列(或者更确切地说是散列引用)
    $hash_ref = $sth->fetchrow_hashref;
    
  • 关于perl - 在 Perl 的严格模式下使用动态生成的变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17434333/

    相关文章:

    arrays - PHPStorm 提示数组变量的简单使用

    haskell - Haskell 中的堆溢出

    arrays - 在 Perl 中循环遍历数组的多维哈希

    python - 在局部函数中访问全局函数的变量

    variables - GHC 拒绝 ST monad 代码无法统一类型​​变量?

    javascript - 构造函数中的 "use strict"是否扩展到原型(prototype)方法?

    haskell - 避免二叉树构造中的堆栈溢出

    perl - 如何在 perl 中编写覆盖导入函数的模块函数

    perl - 如何从 Perl 中的现有散列创建匿名散列?

    perl - 如何使用 Getopt::Std 设置默认值?