2017-09-15 62 views
1

我想了解下面的代码段;我只是不明白在第15行正在做什么。作为数组散列分配

它似乎是试图初始化/分配到%heading,但我只是不知道该语法是如何工作的。

$strings = [qw(city state country language code )]; 

my $file = "fname"; 
my $fn = $strings; 
my $c = 0; 

open(FILEH, "< ${file}.txt") or die($!); 

while (<FILEH>) { 

    my %heading; 
    chomp; 
    $c++; 

    @heading{ (@$fn, "One") } = split(/[|]/); # Line 15 

    if (defined($heading{"One"})) { 
     my $One = $heading{"One"}; 
    } 
+0

'split(/ [|] /)'通常写成'split/\ | /'。 – Borodin

回答

6

这就是所谓的“切片”。将其分配给多个键一次:

@hash{ $key1, $key2 } = ($value1, $value2); 

是做

$hash{$key1} = $value1; 
$hash{$key2} = $value2; 

@$fn的较短和更快的方式是一样的@{ $fn },即阵列解引用。

+0

谢谢但@ $ fn呢?你能解释这是如何工作的吗? – Vicky

+0

@Vicky:检查更新。 – choroba

+0

所以在Perl中字符串可以像数组一样被解引用?因为在$ fn上面的代码实际上是一个字符串。 – Vicky