1

私は次のようにperlファイル(test2.plと呼びましょう)にハッシュを持っています:

our %hash1;

my %hash2 = {
    one   => ($hash1{"zero1"},  $hash1{"one1"}  ),
    two   => ($hash1{"one1"},   $hash1{"two1"}  ),
    three => ($hash1{"two1"},   $hash1{"three1"}),
    four  => ($hash1{"three1"}, $hash1{"six1"}  ),
    five  => ($hash1{"six1"},   $hash1{"one2"}  ),
    six   => ($hash1{"one2"},   $hash1{"two2"}  ),
    last  => ($hash1{"two2"},   $hash1{"last1"} ),
};

これは6つUse of uninitialized value in anonymous hash ({}) at test2.pl line 7.のエラーを取得しています(ファイルの7行目はそのmy %hash2行に対応し、すべてのエラーは7行目を示しています)。

%hash1これは、このファイルを呼び出す別のファイル(test1.pl)で定義されているためだと思います。ourそれを定義するには、を使用するだけで十分だと思いました。これを機能させるには、ハッシュ内のすべての変数を初期化する必要がありますか?

our(そこで宣言した他の変数があるので、角かっこを使用しています。)

4

1 に答える 1

6

Perlでは、ハッシュを偶数リストとして定義します。つまり、中括弧ではなく、親によって区切られます

my %hash = (
  key1 => "value1",
  key2 => "value2",
);
my $anonHashRef = {
  key1 => "value1",
  key2 => "value2",
};

中括弧は、新しい匿名ハッシュ参照を作成します。

別のファイルからハッシュにアクセスしたくない場合はpackage、上部にある宣言を使用する必要があります。

package FooBar;
# Your %hash comes here
# it HAS to be GLOBAL, i.e. declared with `our`, not `my`

次に、ファイルrequireまたはuseファイル(ファイル名とパッケージ名は同じであることが望ましい)を使用して、グローバルなパッケージとしてハッシュにアクセスできます。

メインファイル:

use 'file2.pl';
my $element = $FooBar::hash{$key};

Exporter別の名前空間でデータ構造を使用するより良い方法については、モジュールを参照してください。

于 2012-09-04T10:43:06.253 に答える