Perl 一次分配多个键/值对
是否可以将此赋值作为某种类型的数组赋值来执行,这样就不会太冗长了Perl 一次分配多个键/值对,perl,Perl,是否可以将此赋值作为某种类型的数组赋值来执行,这样就不会太冗长了 $byRobotNumber->{'inquiry'}=$tokens->[13]; $byRobotNumber->{'rch'}=$tokens->[16]; $byRobotNumber->{'serial'}=$tokens->[3]; 在这里,$byRobotNumber显然是对散列的引用,$tokens是对数组的引用。您可以使用散列切片,在我们的例子中是hashref切片 第一个技巧是散列切片:如果%h是散列,@h{
$byRobotNumber->{'inquiry'}=$tokens->[13];
$byRobotNumber->{'rch'}=$tokens->[16];
$byRobotNumber->{'serial'}=$tokens->[3];
在这里,$byRobotNumber显然是对散列的引用,$tokens是对数组的引用。您可以使用散列切片,在我们的例子中是hashref切片 第一个技巧是散列切片:如果
%h
是散列,@h{LIST}
是散列切片,返回与键列表对应的值列表。它也可以是左值
第二个技巧是,当您有一个hashref$hr
时,{$hr}
的行为方式与hash%h
的无符号内核h
的行为方式相同
同样的事情也适用于数组。这让我们想到:
@{$byRobotNumber}{qw(inquiry rch serial)} = @{$tokens}[13,16,3];
在我们的例子中,可以使用hashref切片 第一个技巧是散列切片:如果
%h
是散列,@h{LIST}
是散列切片,返回与键列表对应的值列表。它也可以是左值
第二个技巧是,当您有一个hashref$hr
时,{$hr}
的行为方式与hash%h
的无符号内核h
的行为方式相同
同样的事情也适用于数组。这让我们想到:
@{$byRobotNumber}{qw(inquiry rch serial)} = @{$tokens}[13,16,3];
通过使用等号两侧的列表,可以并行地为变量赋值:
( $byRobotNumber->{'inquiry'},
$byRobotNumber->{'rch'},
$byRobotNumber->{'serial'}
) = ($tokens->[13], $tokens->[16], $tokens->[3]);
或者更简单的选择是使用哈希片和数组片:
@{$byRobotNumber}{qw/inquiry rch serial/} = @{$tokens}[qw/13 16 3/]
通过使用等号两侧的列表,可以并行地为变量赋值:
( $byRobotNumber->{'inquiry'},
$byRobotNumber->{'rch'},
$byRobotNumber->{'serial'}
) = ($tokens->[13], $tokens->[16], $tokens->[3]);
或者更简单的选择是使用哈希片和数组片:
@{$byRobotNumber}{qw/inquiry rch serial/} = @{$tokens}[qw/13 16 3/]
如果项目的数量变得难以处理,您可以创建另一个散列来将键映射到索引,例如
my%mapping=(foo=>1,bar=>12)@{$byRobotNumber}{keys%mapping}=@{$tokens}[值%mapping]
如果项目的数量变得难以处理,您可以创建另一个散列来将键映射到索引,例如my%mapping=(foo=>1,bar=>12)@{$byRobotNumber}{keys%mapping}=@{$tokens}[值%mapping]代码>