北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

myの有効範囲に気をつけて

以下のコードは、ClassBの$hageをtypoしてます。でも、use strictも効かずコンパイルが通ってしまいます。

package ClassA;
use strict;
my $hoge;
sub count_up_hoge{return ++$hoge;}

package ClassB;
use strict;
my $hage;
sub count_up_hage{return ++$hoge;}

package main;
# hoge count
print "hoge 1: ", ClassA->count_up_hoge(), "\n";
print "hoge 2: ", ClassA->count_up_hoge(), "\n";
# hage count
print "hage 1: ", ClassB->count_up_hage(), "\n";
print "hage 2: ", ClassB->count_up_hage(), "\n";

my宣言はファイルの末尾まで有効なためです。ClassAで宣言したはずの$hogeは、ClassBでもmainでも使えます。