Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 一次分配多个键/值对_Perl - Fatal编程技术网

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]