0

我有如下代码:

 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 "};"

我在这里做错了什么?

4

2 回答 2

4

首先你必须写$i."ubid"or"${i}ubid"而不是"$i.ubid".

我会使用像这样的哈希:

my %player_ubid;
for my $i ( 2 .. 4 ){
    $player_ubid{$i} = grep { $_->ubid eq $i."ubid" } @{$room_members };
}
于 2013-09-04T07:33:08.267 回答
1

您以错误的方式声明变量,您可以使用 hash 代替它。

但是如果您想以类似的方式实现,请以这种方式进行

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

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

于 2013-09-04T07:31:48.410 回答