在 Perl 中如何使用变量作为变量名?

2024-03-31

我需要在 perl 中实现以下目标

printmsg(@val1, $msg1) if @val1;
printmsg(@val2, $msg2) if @val2;
printmsg(@val3, $msg3) if @val3;
printmsg(@val4, $msg4) if @val4;
printmsg(@val5, $msg5) if @val5;
printmsg(@val6, $msg6) if @val6;

所以我写了以下片段

for(my $i=1; $i < 6; $i++ ) {
    printmsg(@val$i, $msg$i) if @val$i;
}

它不起作用并且会出现错误。


每当您发现自己用整数索引后缀变量名称时 https://stackoverflow.com/a/1829927/100754,意识到你应该使用数组来代替:

my @msgs = ('msg1', 'msg2', ..., 'msg6');
my @vals = ( [ @val1 ], [ @val2 ], ..., [ @val6 ] );

另请参阅常见问题解答如何使用变量作为变量名? https://metacpan.org/pod/perlfaq7#How-can-I-use-a-variable-as-a-variable-name

正如常见问题解答的答案所指出的,如果变量不是由整数索引,则可以使用哈希表:

通过使用符号引用,您只需使用包的符号表哈希(例如%main::) 而不是用户定义的哈希值。解决方案是使用您自己的哈希值或真实的引用。

$USER_VARS{"fred"} = 23;
my $varname = "fred";
$USER_VARS{$varname}++;  # not $$varname++

您应该每年至少阅读一次完整的常见问题解答列表。

Update:我故意在回答中留下了象征性引用,因为它们是不必要的,并且在您的问题中可能非常有害。有关更多信息,请参阅为什么“使用变量作为变量名”是愚蠢的? http://perl.plover.com/varvarname.html, part 2 http://perl.plover.com/varvarname2.html and part 3 http://perl.plover.com/varvarname3.html by mjd http://hop.perl.plover.com/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Perl 中如何使用变量作为变量名? 的相关文章

随机推荐