晴耕雨読

working in the fields on fine days and reading books on rainy days

Perl6 要素が一つの配列

Perl6 で要素が一つの配列(特にハッシュの配列または配列の配列)を定義しようとしたときに、Rubyのように書いていたらつまづいたので、ここにメモします。

よくやるパターン

次に示すように、ハッシュの配列を定義しようとすると、ペア(Pair)の配列になってしまう問題がある。 もちろん、これは期待していない振る舞いだ。

my @list = [
    { name => "foo", id => 1 }
];
@list.perl.say;

上の出力(ペアの配列)

[:id(1), :name("foo")]

解決法

{ } の末尾に , を入れることで、正しくハッシュと認識される。 この問題は 2次元配列でも起きるようだが、同様に [ ] の末尾に , を入れれば良い。

my @list = [
    { name => "foo", id => 1 }, # <= カンマがあることに注目
];
@list.perl.say;

上の出力(ハッシュの配列)

[{:id(1), :name("foo")},]