如何在Perl中使用索引名称创建新变量?

时间:2009-12-24 12:29:54

标签: perl

嗨,我读过一些相关问题似乎没有帮助我。 这是一个可以解释我想要的代码。

for ($i=0;$i<5;$i++) {
  my $new$i=$i;
  print "\$new$i is $new$i";
}

期望变量命名为$new0$new1$new2$new3$new4$new5。 并且像打印命令一样在循环中使用它们是非常有用的。 谢谢

5 个答案:

答案 0 :(得分:18)

您想要使用hash or array代替。它允许将数据集合保持在一起,从而减少线下的痛苦。

my %hash;
for my $i (0..4) {
    $hash{$i} = $i;
    print "\$hash{$i} is $hash{$i}\n";
}

答案 1 :(得分:11)

你能描述为什么你需要做到这一点。 马克杰森多米纳斯写过为什么这样做不是一个好主意为什么“使用变量作为变量名称”是愚蠢的 part 1part 2part 3

如果您认为您的需求是对此处描述的案例的例外情况,请告诉我们这里的人员可能会有所帮助。

答案 2 :(得分:9)

你问的是一个常见的问题。 99.9%的案例中的答案是不要那样

这个问题非常普遍,它位于perlfaq7: How can I use a variable as a variable name?

有关符号引用问题的大量讨论,请参阅“How do I use symbolic references in Perl?”。

答案 3 :(得分:2)

使用哈希代替。

my %h=();
$new="test";
for ($i=0;$i<5;$i++) {
  $h{"$new$i"}=$i;
}
while( my( $key, $value ) = each( %h ) ) {
    print "$key,$value\n";
}

答案 4 :(得分:-4)

如果你想创建像$ newN这样的变量,你可以使用eval

eval("\$new$i=$i");

(使用哈希可能会更好)