dポイントプレゼントキャンペーン実施中!

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
この質問を調べていたら発見しました

A 回答 (2件)

ActivePerl で試しました.


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

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

勉強になりました。ありがとうございましたm(_ _)m

お礼日時:2009/03/07 01:14

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

:: は同じでしたね.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!