ハッシュを配列で初期化する

はい、おそらく当たり前の事です。でも、私は知らなかったんですよ。。。
ということで、私の中での"ハッシュの初期化"です。


my %mon_hash = (
Jan => 0, Feb => 1, Mar => 2, Apr => 3,
May => 4, Jun => 5, Jul => 6, Aug => 7,
Sep => 8, Oct => 9, Nov => 10, Dec => 11
);
keyとvalueをアロー演算子で紐付けます。見やすいです。

で、何気に perldata 見て気づいたのが以下


ハッシュはキーと値と解釈される値のペアとなるリストリテラルを使って初期化されます:

# same as map assignment above
%map = ('red',0x00f,'blue',0x0f0,'green',0xf00);

,(カンマ)区切りで配列だ。。。

個人的には衝撃を受けました。まずは付属のpodをちゃんと読まないとダメだ〜。



my $mon_str = 'Jan 0 Feb 1 Mar 2 Apr 3 May 4 Jun 5 Jul 6 Aug 7 Sep 8 Oct 9 Nov 10 Dec 11';
my %mon_hash = split /\s+/, $mon_str;
とか

my @mon_array = ('Jan',0,'Feb',1,'Mar',2,'Apr',3,'May',4,'Jun',5,'Jul',6,'Aug',7,'Sep',8,'Oct',9,'Nov',10,'Dec',11);
my %mon_hash = @mon_array;
とか

my %mon_hash = qw/Jan 0 Feb 1 Mar 2 Apr 3 May 4 Jun 5 Jul 6 Aug 7 Sep 8 Oct 9 Nov 10 Dec 11/;
とできるのですか〜

私はperlに触れて何年目?