我的代码如下:
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 "};"
我在这里做错了什么?
答案 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中一样。