Perl:在循环中创建新变量

时间:2013-09-04 07:09:40

标签: perl loops

我的代码如下:

 my $player_2ubid = grep { $_->ubid eq "2ubid" } @{$room_members };
 my $player_3ubid = grep { $_->ubid eq "3ubid" } @{$room_members };
 # ....
 my $player_11ubid = grep { $_->ubid eq "11ubid" } @{$room_members };

为避免重复,我想去一个循环

for my $i ( 2 .. 11 ){
my $player_.$i.ubid = grep { $_->ubid eq "$i.ubid" } @{$room_members };
}

然而,这会产生语法错误:

Can't modify concatenation (.) or string in scalar assignment at ***.t line 100, near "};"

我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

首先,您必须写$i."ubid""${i}ubid"而不是"$i.ubid"

我会使用像:

这样的哈希
my %player_ubid;
for my $i ( 2 .. 4 ){
    $player_ubid{$i} = grep { $_->ubid eq $i."ubid" } @{$room_members };
}

答案 1 :(得分:1)

您以错误的方式声明变量,您可以使用哈希而不是它。

但如果你想以类似的方式实现,那就这样做吧

for my $i ( 2 .. 11 ){
  my $var = "player_".$i."ubid";
  $$var = grep { $_->ubid eq $i."ubid" } @{$room_members };
}

$$在变量中创建值的变量,就像在php中一样。