如何在 Perl 中使用变量作为变量名? [英] How can I use a variable as a variable name in Perl?

查看:56
本文介绍了如何在 Perl 中使用变量作为变量名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在 perl 中实现以下内容

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

所以我写了下面的代码片段

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

它不起作用并且出现错误.

解决方案

每当你发现自己用整数索引后缀变量名时

a>,意识到您应该使用数组代替:

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

另见常见问题解答 如何使用变量作为变量名?

作为FAQ的答案,如果变量不是整数索引,你可以使用哈希表:

<块引用>

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

$USER_VARS{"fred"} = 23;我的 $varname = "fred";$USER_VARS{$varname}++;# 不是 $$varname++

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

更新:我故意将符号引用从我的答案中排除,因为它们在您的问题的上下文中是不必要的并且可能非常有害.有关详细信息,请参阅 为什么将变量用作变量名"很愚蠢?第 2 部分第 3 部分 作者 mjd.

I need to achieve the following in 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;

So i wrote the following snippet

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

It doesn't work and breaks out with errors.

解决方案

Whenever you find yourself postfixing variable names with an integer index, realize that you should have used an array instead:

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

See also the FAQ How can I use a variable as a variable name?

As the answer to the FAQ notes, if the variables are not indexed by an integer, you can use a hash table:

By using symbolic references, you are just using the package's symbol-table hash (like %main::) instead of a user-defined hash. The solution is to use your own hash or a real reference instead.

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

You should read the entire FAQ list at least once a year.

Update: I purposefully left symbolic references out of my answer because they are unnecessary and likely very harmful in the context of your question. For more information, see Why it's stupid to 'use a variable as a variable name'?, part 2 and part 3 by mjd.

这篇关于如何在 Perl 中使用变量作为变量名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆