2016-04-08 3 views
0
#!/usr/bin/perl -w 
use strict; 

my @extensiveArray = ((
    id => 1, 
    name => 'Bob', 
    ), 
    (
    id => 2, 
    name => 'Barley', 
    ), 
    (
    id => 3, 
name => 'Marley', 
) 
); 


my %hashRef = map { $_->{id} => { $_->{name} } } @extensiveArray; 

このコードでは何が間違っていますか?「文字列{id}をハッシュリファレンスとして使用できません「厳密なリファレンス」は使用中です厳密な参照が使用されているため、マップエラーでハッシュするperl配列

+1

'@ extensiveArray'はそれがあなたの考えではありません。 'Use Data :: Dumper; print Dumper \ @extensiveArray; ' –

+0

あなたの配列がどこから来たのかチェックしてください。万一XMLやJSONを読んでいるのですか?よりよい解決策があるかもしれないので? – Sobrique

+0

そのコードはそのエラーを表示しません。 – ikegami

答えて

4

@extensiveArrayの中にハッシュリファレンスを使用する必要があります。今あなたが持っているのは平らなリストです。 Perlはネストされたリストをサポートしていません。

my @extensiveArray = (
    { 
     id => 1, 
     name => 'Bob', 
    }, 
    { 
     id => 2, 
     name => 'Barley', 
    }, 
    { 
     id => 3, 
     name => 'Marley', 
    } 
); 

あなたがそれを行うならば、あなたは理由{}の、無名ハッシュ内の要素の誤差奇数番号を取得します。

       # here # 
my %hashRef = map { $_->{id} => { $_->{name} } } @extensiveArray; 

あなたはmapからキー/値のペアを返すようにしたい場合は、単にフラットなリストを返します。それはすべてハッシュです、本当に。

my %hashRef = map { $_->{id} => $_->{name} } @extensiveArray; 

perlreftutとそこにリンクされている他のページをチェックしてください。

+0

ohh gr8ありがとう:) – eLemEnt

関連する問題