• ベストアンサー

Perlでの不思議な現象

use strict; use warnings; 0->[0] = 100; print 0->[0]; # => 100 こんなソースがコンパイルも通りちゃんと100と表示されてしまうのですが 一体何が起こっているのか分かる人教えてくださいm(_ _)m 環境はcygwin perlとStrawberry Perlで確認しました ちなみに http://oshiete1.goo.ne.jp/qa4723836.html この質問を調べていたら発見しました

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ActivePerl で試しました. ぱっと見た感じ, 0->[0] を $0[0] と解釈しているような気がします. 0 だとわかりにくいのですが, 1->[0] = 1; print keys %::, "\n"; と 1行目のないバージョンを見てみると, 1行目があることにより「1」というキーが増えていることが確認できます. 参照している方の質問 (しまった, 無視してた....) でも同じ現象が起きていると考えられます. ちなみに あっちの #3 はほぼ正解なのですが, :: ではなく main:: を調べたためにわからなくなっているものと想像されます. ちなみに a->[0] = 1; とやると, 今度こそ main:: に入っていることも確認できます.

kirikirkaz
質問者

お礼

なるほど、1->[0] は $1[0]でしたか。 (一瞬そうだと思って$1も調べたりしたのに・・・なんかあっちの回答といい抜けまくってるなぁorz) 勉強になりました。ありがとうございましたm(_ _)m

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

すみません, ちょっと試してみましたが :: だけでなく main:: にも入ってます. というか, そもそも :: と main:: は同じでしたね.

関連するQ&A