our EXPR
our
は、my
やlocal
と同様に、変数を宣言するためのものです。our
宣言された変数は、グローバル変数をパッケージ名で修飾しなくても使用できるようにします。our
宣言はmy
宣言と似ていますが、新たにローカル変数を生成するかわりに、カレントパッケージに所属するグローバル変数をパッケージ修飾なしで使えるようにしてくれます。our
宣言の有効範囲は、my
と同じで、宣言が置かれているブロック、eval
、またはファイルの末尾まで有効です。
our
宣言は、use strict 'vars'
プラグマと共に使用されます。use strict 'vars'
プラグマを指定した場合、グローバル変数はパッケージ名で修飾して$package::var
のように書く必要がありますが、our
宣言により、パッケージ名を省略できます。
our
で宣言した変数は、宣言を行なった時点で有効なパッケージに所属します。package
文によって別パッケージに切り替えたとしても、our
宣言された変数は、あくまでも宣言時のパッケージに所属すると解釈されます。
ourの使い方
package Foo; our $bar = 10; package Bar; # パッケージFooの$bar print $bar,"\n"; > 10