Togetter/min.tを安心してお使い頂くためのガイドラインを公開しました。

リストと配列(Array)はPerlでは別物

違いについて教えてもらった。ありがとうございます。
10
ひさいち @hisaichi5518

リストと配列一緒だと思ってた。 #Perl入学式

2012-02-25 15:55:26
柴崎優季 @shiba_yu36

@hisaichi5518 今も一緒だと思ってるでした

2012-02-25 15:57:20
柴崎優季 @shiba_yu36

@hisaichi5518 でもどうなんだろう。Perlで配列って言葉聞かない気がする。リストコンテキストって言葉があるからかな

2012-02-25 15:59:29
songmu @songmu

@hisaichi5518 @shiba_yu36 リストと配列(Array)はPerlでは別物だよ。リストはlisp由来。値の返し方のコンテキストがスカラとリストがある。ハッシュだって、値を返させるとリストを返すでしょう。

2012-02-25 20:36:33
songmu @songmu

@hisaichi5518 @shiba_yu36 my %hash;$hash{qw/1 2 3/} = 'hoge';say $hash{qw/1 2 3/};say Dumper \%hash; とかやると驚きの結果が。

2012-02-25 20:39:13
songmu @songmu

@hisaichi5518 @shiba_yu36 my $var = scalar (2,4,6,8);say $var; とかでも驚きの結果が。(4じゃないよ)

2012-02-25 20:41:39
構造体移し替え業 @mackee_w

本気で「えっ」って言ってしまった RT @songmu: @hisaichi5518 @shiba_yu36 my $var = scalar (2,4,6,8);say $var; とかでも驚きの結果が。(4じゃないよ)

2012-02-25 20:43:39
柴崎優季 @shiba_yu36

さーて俺もさっきのやってみるかー

2012-02-26 00:56:07
柴崎優季 @shiba_yu36

ちょっとこれどういうことなのか分かんないんですけど...

2012-02-26 01:02:54
柴崎優季 @shiba_yu36

@hisaichi5518 これなんでこうなるか分かる?

2012-02-26 01:04:28
ひさいち @hisaichi5518

@shiba_yu36 わかんない。一発目のやつはSyntax Errorになると思ってた。

2012-02-26 01:05:12
柴崎優季 @shiba_yu36

@hisaichi5518 そうだねー。配列とハッシュはリストを使って実装されていて、配列をスカラーコンテキストで評価すると配列数になるだけで、リストをスカラーコンテキストで評価すると違う結果になるということなのかな...

2012-02-26 01:06:35
ひさいち @hisaichi5518

@shiba_yu36 多分そう!!!!!!ってなりました。

2012-02-26 01:07:06
ひさいち @hisaichi5518

$hash{qw/1 2 3/};がなんで動くのかわからなくてうける。

2012-02-26 01:13:17
構造体移し替え業 @mackee_w

@hisaichi5518 リスト自体がキーになっているらしいです。JSとかでイベント名にオブジェクトを突っ込めるみたいなもんです

2012-02-26 01:14:34
songmu @songmu

スカラコンテキストで要素数返すってのは、配列の特徴であってリストの特徴ではないってことですね。my $var = %hash;とかやるとまた奇妙な結果になるし。

2012-02-25 21:08:51
songmu @songmu

$hash{qw/hoge fuga/}だとリストをキーにした値の取り出しで、@hash{qw/hoge fuga/}だと、ハッシュスライスでキーがhogeとfugaの要素を列挙する。

2012-02-25 22:21:23
佐藤 [退席中] @outerinside

@hisaichi5518 「リスト自体がキー」というのは正確ではないです。リストを渡すと特殊変数 $; をセパレータにして join した結果がキーになります。つまり $hash{qw/foo bar/} は $hash{join($;, qw/foo bar/)} と等価

2012-02-26 01:33:31
佐藤 [退席中] @outerinside

案外 $; の挙動は知られていない

2012-02-26 01:34:01
ひさいち @hisaichi5518

すっきり出来た感じする。

2012-02-26 01:34:56
songmu @songmu

$; については書いてたのに、ひさいちくん読んでくれてなかった…

2012-02-26 01:35:57
songmu @songmu

$hash{1,2}は 多次元配列のエミュレートとか言うらしい。awk由来でリファレンスが無かった頃のバッドノウハウ的な感じですな。 perldoc perldsc にその辺のことが書いてある。

2012-02-26 01:32:52
songmu @songmu

@shiba_yu36 @hisaichi5518 コンテキスト(値の返し方)にスカラとリストがあって、変数の型としてスカラ・配列・ハッシュ等があるってことですよ。混同してはいけない。

2012-02-26 01:24:46
残りを読む(4)

コメント