2009-07-08 8 views
1

Perl 5.10では、値が配列であるスカラーキーを使用してハッシュを作成してアクセスするにはどうすればよいですか?値が配列であるスカラーキーを使用してPerlハッシュを作成してアクセスするにはどうすればよいですか?

#Doing this does not work properly. 
%someHash= ("0xfff" => ('Blue', 'Red', 'Yellow')); 
@arr = @fileContents{"0xfff"}; 
print @arr; 

私は配列を印刷すると、印刷さ唯一の事は、 "ARRAY( 'randmemAddr')" です。 @arrでforeachループを実行すると、最初の要素だけが出力されます。私は、私がハッシュに適切に配列を格納していないと結論づけました。

答えて

12

私の元の回答は作業コードを掲示しましたが、実際にあなたの問題を説明していませんでした。これはそれを修正するために少し拡張されています。あなたの例には2つの問題がありました。まず、参照を作成するときに問題が発生しました。 (匿名配列への)参照を作成するには、標準カッコの代わりに[ ]を使用する必要があります。第二に、あなたが参照を取得しようとしたとき、あなたは一組の括弧を外した。配列全体を取得するために、参照自体を@{ }の中に入れたいとします。 (また、これはタイプミスかもしれません:filecontentsより前には$がありません)

ここのコードは基本的にperldoc perldscです。私は非常にそれをお勧めします。また、Perlでのリファレンスを初めてお持ちの方はperldoc perlreftutです。両方のチュートリアルでは、さまざまな状況で参照を作成して取得する方法について説明します。最後に、PerlMonksの投稿の参考文献の良いチートシートを見つけることができます。

#!/usr/bin/env perl 
use strict; 
use warnings; 


my %HoA = (
    flinstones  => [ qw/fred barney/ ], 
    jetsons   => [ qw/george jane elroy/ ], 
); 

for my $family (keys %HoA) { 
    print "Members of the \u$family:\n"; 
    print "\t @{ $HoA{$family} }\n"; 
} 
+1

+1のperldoc参照を投稿してください。 'perldoc'は、コマンドラインからインストールしてアクセス可能であることに注意してください。ウェブサイトは便宜上のものです。 –

+0

だから、私は常に 'perldoc'をコードフォントで書くのです。しかし今、私はそれを考えています、それは誰にとっても明らかなつながりではないかもしれません。 (つまり、端末で頻繁に動作しない場合や、端末からすべてのperldocを使用したことがない場合は、フォントが飛び越えないことがあります。) – Telemachus

4

アレイへの参照を格納し、逆参照することについてもっと明示する必要があります。

はこれを試してみてください。それを使用している場合

#Doing this doeswork properly. 
%someHash= ("0xfff" => ['Blue', 'Red', 'Yellow']); 
@arr = @{$fileContents{"0xfff"}}; 
print @arr; 

予告括弧は、ブラケットとキャストになりました。

2

ハッシュ要素または配列要素は常にスカラです(特定の内部使用を除き、Perlから直接的には使用できません)。したがって、配列には参照を格納できますが、配列は格納できません。

3

Data::Dumperモジュールを使用する方がずっと簡単です。確率は非常に高く、それはあなたのperlディストリビューションに付属しています。これにより、データ構造が何であるかを素早く確認することができます。

次のようになり、あなたの場合:

use Data::Dumper; 
my %someHash= ("0xfff" => ('Blue', 'Red', 'Yellow')); 
print Dumper \%someHash; 

この意志出力:コースの

$VAR1 = { 
    'Red' => 'Yellow', 
    '0xfff' => 'Blue' 
}; 

、あなたが参照としてあなたの配列を格納する必要があり、それを修正する:

use Data::Dumper; 
my %someHash= ("0xfff" => [qw(Blue Red Yellow)]); 
print Dumper \%someHash; 

生産するもの:

$VAR1 = { 
      '0xfff' => [ 
          'Blue', 
          'Red', 
          'Yellow' 
         ] 
     }; 

ボトムラインはData :: Dumperはあなたの親友です

+0

Data :: Dumperは確かにコアモジュールです( "perldoc perlmodlib"を参照してください)、これはPerlのすべての最新の配布に含まれています。 –

関連する問題