2017-09-15 85 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