1

その主題を正しく述べたことを願っています。ファイルの読み取りから構築したハッシュのハッシュがあります。外側のハッシュはグループで、内側のハッシュはそのグループ内のパラメーターです。各パラメーター値はスカラーまたは配列のいずれかであり、配列はゼロまたは 1 から開始できます。

パラメータの値を返すサブルーチンを作成しました。呼び出し元の関数は、戻り値がスカラーか配列かを判断する必要があります。スカラーに対してはうまく機能します。配列値の配列への参照を返します ( のようになりますARRAY(0x004f00))。を使用Data::Dumperすると、配列のように見えるデータが吐き出されますが、コードでそれを逆参照する方法がわかりません。誰かが私が間違っていることを指摘できますか?

%HoH = (
    flintstones => {
        husband     => "fred",
        possessions => [ undef, "car", "record player", "rock" ],
        pal         => "barney",
        pets        => [ "bird", "dinosaur" ],
    },
);

get_value("possessions");

sub get_value {

    my $what_i_want = shift;

    @groups = keys(%HoH);

    foreach my $group ( @groups ) {

        foreach my $param ( keys( %{ HoH {group} } ) ) {

            if ( $param eq $what_i_want ) {
                return $HoH{$group}{$param};
            }
        }
    }
}

呼び出し元は戻り値を配列 に代入する@returnため、スカラーの場合は値を に入れる必要があります$return[0]

配列の場合は、配列に値を設定する必要があります。を呼び出すとDumper、一重引用符で囲まれたスカラーと角括弧で囲まれた配列が出力されます。ただし、scalar(@return)配列のサイズを確認するために使用すると、1 が返されます。

最後に角括弧を使用して return ステートメントを逆参照して、スカラーを返すことさえできるかどうかを確認しましたが、うまくいきませんでした。

4

1 に答える 1