0

簡単な質問: 以下の変数をハッシュに格納したいと思います:

my %hash1;
my %hash2;
my %hash3;
my @array1;
my @array2;
my @array3;

最終結果は次のとおりです。

Hash
    hash1Name
             {key1=>val1,key2=>val2}
    hash2Name
             {key1=>val1,key2=>val2}
    hash3Name
             {key1=>val1,key2=>val2}
    array1Name
             [element1,element2,...]
    array2Name
             [element1,element2,...]
    array3Name
             [element1,element2,...]

なぜ私はこれをしたいのですか:まあ、これはすべて関数(サブ)で行われるので、単一のハッシュですべてのデータを返したいです。

これは可能ですか?

これらの変数を保持できるクラスを作成する方がよいでしょうか?

ありがとう

4

3 に答える 3

3

ハッシュまたは配列内に任意のスカラーを格納できます。スカラーには、配列またはハッシュへの参照が含まれます。

my $hash = {
  hash1Name => \%hash1,
  hash2Name => \%hash2,
  hash3Name => \%hash3,
  array1Name => \@array1,
  array2Name => \@array2,
  array3Name => \@array3,
}

Perl には、これを行いたい場合に邪魔になるような型システムはありません。ただし、プログラマーは、タイプに関係なく、ハッシュの内容を正しく処理する責任があります。よりクリーンなデザインが可能になる場合は、OO を使用できます。しかし、それに注意してください

  1. とにかく、基礎となるオブジェクトは通常、そのようなハッシュによって実装されます
  2. オブジェクト指向のためのオブジェクト指向は、基本的なデータ構造で十分な場合に、コードを不必要に複雑にします。
于 2013-06-26T10:38:35.480 に答える
2

はい、可能です。レキシカル変数を使用すると、最も簡単に実行できます。

sub mysub {
    my %hash1;
    my %hash2;
    my %hash3;
    my @array1;
    my @array2;
    my @array3;
    ...
    my %all = (
         hash1  => \%hash1,
         hash2  => \%hash2,
         array1 => \@array1,
         # etc
    );
    return \%all;
}

すべてのデータを含むハッシュ参照である単一のスカラー値を返します。

于 2013-06-26T10:37:25.970 に答える
1
my %Hash = (
   hash1Name  => \%hash1,
   hash2Name  => \%hash2,
   hash3Name  => \%hash3,
   array1Name => \@array1,
   array2Name => \@array2,
   array3Name => \@array3,
);

しかし、おそらくハッシュへの参照が必要です。

my $Hash = {
   hash1Name  => \%hash1,
   hash2Name  => \%hash2,
   hash3Name  => \%hash3,
   array1Name => \@array1,
   array2Name => \@array2,
   array3Name => \@array3,
};
于 2013-06-26T10:37:33.520 に答える