5

純粋にアカデミックな質問であり、ここでそれらを禁止する指示は表示されません(ただし、「アカデミック」のようなタグは見つかりませんでした)。

次のような既存のハッシュがある場合は、次のようにスライス(?)を取得できます。

my %hash = (one=>1, two=>2, three=>3, four=>4);
my ($two, $four) = @hash{'two','four'};

このようなサンプル関数からハッシュが返される場合、これを行う方法はありますか?

sub get_number_text
{
    my %hash = (one=>1, two=>2, three=>3, four=>4);
    return %hash;
}

動作する1つの方法は次のとおりです。

my ($two, $four) = @{ { get_number_text() } }{'two', 'four'};

私が理解しているように、関数はハッシュキー/値のリストを返し、内部の{}は匿名のハッシュ/参照を作成し、@ {}は参照を使用して、Perlが参照を知っているため、ハッシュスライスとも呼ばれるリストに「キャスト」します。ハッシュです。(最後のビットが機能したことに少し驚いたが、Perlなどにより多くのパワーがあった)

しかし、それは確かに奇妙なアクセスを1つの表現で書くための最も明確な方法ですか?

4

1 に答える 1

6

return %foo一般に、サブルーチンからフラット化されたハッシュ()を返すことは避けてください。別のハッシュにコピーせずに作業するのが難しくなります。ハッシュ参照()を返す方が良いreturn \%fooです。

しかし、はい、それが最も明確な方法です。多くの場合、ハードコードされたキーのリストはqwを使用して提供されます。

my ($two, $four) = @{ { returnit() } }{ qw/two four/ };
于 2013-01-08T22:48:11.510 に答える