use strict; と $a と $b

前にもハマって,今回もまた足を取られたのでメモ。

昨日から以下のコードの結果に頭を悩ませていた。

#!/usr/bin/perl
use strict;

$a = 100;
print "$a\n";

# <実行結果>
# $ perl try.pl
# 100
#

あれ!?
use strict; してるのに「Global symbol "$a" requires explicit package name 〜」っていう
警告メッセージが出ないぞ!?

以前にも同じ事で悩んでいて,解決した筈なんだけどなんだったけな???

今日やっと思い出しました。

変数 $a と $b は,ソートルーチンでも特別な意味があったよな。
だからわざわざ my でレキシカル変数として宣言しなくても警告が出ないのかな?

#!/usr/bin/perl
use strict;

$c = 100;
print "$c\n";

# <実行結果>
# $ perl try.pl
# Global symbol "$c" requires explicit package name at try.pl line 4.
# Global symbol "$c" requires explicit package name at try.pl line 5.
# Execution of try.pl aborted due to compilation errors.

やっぱりそうでした。

同じ事で悩んで時間無駄にしてんじゃねーよオレ!