0

関数の引数でハッシュテーブルを渡すと、ハッシュテーブルを取得します。私の場合、function1はハッシュテーブルを返し、次に引数でハッシュテーブルをfunction2に渡し、function2ではハッシュテーブルを取得して参照します。

sub function1{
    my code;
    return %hash;
}

sub function2{
    my %hash=$_[0];
    my code browse my hash;
}

my %hash = function1();
function2(%hash);

次のエラーが発生します:ハッシュ割り当ての要素数が奇数

4

2 に答える 2

2

リストの最初の要素をハッシュに取り込むだけです(つまり、同じサイズのリストなので、警告が表示されます)。これを試して:

sub function1{
    my code;
    return %hash;
}

sub function2{
    my (%hash) = @_;
    my code browse my hash;
}

my %hash = function1();
function2(%hash);

hashrefを使用して必要なものを取得できます。

sub function1{
    my code;
    return \%hash;
}

sub function2{
    my $hash_ref=$_[0];
    my code browse my hash;
}

my $hash_ref = function1();
function2($hash_ref);
于 2013-03-20T13:11:43.680 に答える
1

別の方法は、参照によってハッシュを渡すことです。

sub function1{
    # code here
    return \%hash;
}

sub function2{
    my $hashref = $_[0];

    #code to use the hash:
    foreach (keys %$hashref) { etc... }
}

my $hashref = function1();
function2($hashref);

my %realhash;
function2(\%realhash);

複数のハッシュまたは配列を渡したい場合は、参照渡しが必要です。また、コピーを作成しないため、大量のデータに対してより効率的です。ただし、参照によって渡されたハッシュを関数が変更すると、元のハッシュも変更されます。

于 2013-03-20T13:16:27.527 に答える