編集部が選ぶ「みんなに見てほしい」イチオシまとめはこちら

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

違いについて教えてもらった。ありがとうございます。
プログラミング perl
14043view 1コメント
10
ひさいち @hisaichi5518
リストと配列一緒だと思ってた。 #Perl入学式
柴崎優季 @shiba_yu36
@hisaichi5518 今も一緒だと思ってるでした
柴崎優季 @shiba_yu36
@hisaichi5518 でもどうなんだろう。Perlで配列って言葉聞かない気がする。リストコンテキストって言葉があるからかな
songmu @songmu
@hisaichi5518 @shiba_yu36 リストと配列(Array)はPerlでは別物だよ。リストはlisp由来。値の返し方のコンテキストがスカラとリストがある。ハッシュだって、値を返させるとリストを返すでしょう。
songmu @songmu
@hisaichi5518 @shiba_yu36 my %hash;$hash{qw/1 2 3/} = 'hoge';say $hash{qw/1 2 3/};say Dumper \%hash; とかやると驚きの結果が。
songmu @songmu
@hisaichi5518 @shiba_yu36 my $var = scalar (2,4,6,8);say $var; とかでも驚きの結果が。(4じゃないよ)
トーカナイザの守護霊 @mackee_w
本気で「えっ」って言ってしまった RT @songmu: @hisaichi5518 @shiba_yu36 my $var = scalar (2,4,6,8);say $var; とかでも驚きの結果が。(4じゃないよ)
柴崎優季 @shiba_yu36
さーて俺もさっきのやってみるかー
柴崎優季 @shiba_yu36
ちょっとこれどういうことなのか分かんないんですけど...
柴崎優季 @shiba_yu36
@hisaichi5518 これなんでこうなるか分かる?
ひさいち @hisaichi5518
@shiba_yu36 わかんない。一発目のやつはSyntax Errorになると思ってた。
柴崎優季 @shiba_yu36
@hisaichi5518 そうだねー。配列とハッシュはリストを使って実装されていて、配列をスカラーコンテキストで評価すると配列数になるだけで、リストをスカラーコンテキストで評価すると違う結果になるということなのかな...
ひさいち @hisaichi5518
@shiba_yu36 多分そう!!!!!!ってなりました。
ひさいち @hisaichi5518
$hash{qw/1 2 3/};がなんで動くのかわからなくてうける。
トーカナイザの守護霊 @mackee_w
@hisaichi5518 リスト自体がキーになっているらしいです。JSとかでイベント名にオブジェクトを突っ込めるみたいなもんです
songmu @songmu
スカラコンテキストで要素数返すってのは、配列の特徴であってリストの特徴ではないってことですね。my $var = %hash;とかやるとまた奇妙な結果になるし。
songmu @songmu
$hash{qw/hoge fuga/}だとリストをキーにした値の取り出しで、@hash{qw/hoge fuga/}だと、ハッシュスライスでキーがhogeとfugaの要素を列挙する。
佐藤 [退席中] @outerinside
@hisaichi5518 「リスト自体がキー」というのは正確ではないです。リストを渡すと特殊変数 $; をセパレータにして join した結果がキーになります。つまり $hash{qw/foo bar/} は $hash{join($;, qw/foo bar/)} と等価
佐藤 [退席中] @outerinside
案外 $; の挙動は知られていない
ひさいち @hisaichi5518
すっきり出来た感じする。
songmu @songmu
$; については書いてたのに、ひさいちくん読んでくれてなかった…
songmu @songmu
$hash{1,2}は 多次元配列のエミュレートとか言うらしい。awk由来でリファレンスが無かった頃のバッドノウハウ的な感じですな。 perldoc perldsc にその辺のことが書いてある。
songmu @songmu
@shiba_yu36 @hisaichi5518 コンテキスト(値の返し方)にスカラとリストがあって、変数の型としてスカラ・配列・ハッシュ等があるってことですよ。混同してはいけない。
残りを読む(4)
ログインして広告を非表示にする
ログインして広告を非表示にする