最新の「新着記事」はここから New!
2008-03-08
our - パッケージ変数の宣言
「our」による「パッケージ変数の宣言」について解説します。
パッケージ変数の宣言
パッケージ変数を宣言するにはourを使用します。
our $NUM;
パッケージ変数は、ひとつの名前空間に属するグローバル変数です。パッケージ変数は、修飾名(パッケージ名)を持ち,ソースコードのどの位置からでも参照できます。
パッケージ変数の変数名は「大文字」にするのが、Perlでは習慣となっています。
パッケージ変数の初期化
パッケージ変数の宣言と同時に「初期化」を行うことができます。
our $NUM = 5;
パッケージ変数のスコープと寿命
パッケージ変数の寿命とスコープについて解説します。
パッケージ変数の寿命
パッケージ変数は、宣言して初期化されると、プログラムの最後まで、その値は存在し続けます。
パッケージ変数のスコープ
スコープが終わると、パッケージ名なしで、参照できなくなります。完全修飾名を、使えば、参照できる。
package SomePackage; our $package_var1; $package_var1 = 1; # ourのスコープ { our $package_var2 = 2; } # スコープが終わると、完全修飾名でのみ、参照できる $SomePackage::$package_var2;
パッケージの宣言
Perlではパッケージの宣言は、他の言語の名前空間の宣言にあたります。一般的には、パッケージ名は大文字ではじめる。単語の区切りも大文字にします。
package SomePackage;
パッケージ変数は完全修飾名でアクセスすることもできます。
$SomePackage::package_var1
mainパッケージ
パッケージの宣言が行われない場合、ourで宣言されたパッケージ変数は、mainパッケージに属します。
# 「$main::NUM」として「mainパッケージ」に属する our $NUM;
Perlには、パッケージを持たない変数は存在しません。パッケージがないように見えるものは実は、mainパッケージに属している。
「our」による「変数宣言」は使うべきか
「our」による「変数宣言」を使う機会は、ほとんどありません。なぜならより安全で速い「my」による変数宣言によって、完全なプログラムが書けてしまうからです。
できる限り「our」は避けて「my」だけを使うようにしましょう。
サンプル
パッケージ変数を使ったサンプルです。
use strict; use warnings; # パッケージ変数 print "1: パッケージ変数は、修飾名( SomePackage )を持ち". "プログラムのどの位置からも( スコープの外部からでも )参照できる。\n"; { # SomePackageに属するpackage_var1 $SomePackage::package_var1 = 1; # OtherPackageに属するpackage_var1; $OtherPackage::package_var1 = 2; } print "\$SomePackage::package_var1 = $SomePackage::package_var1\n"; print "\$OtherPackage::package_var1 = $OtherPackage::package_var1\n\n";
実行結果
1: パッケージ変数は、修飾名( SomePackage )を持ちプログラムのどの位置からも( スコ ープの外部からでも )参照できる。 $SomePackage::package_var1 = 1 $OtherPackage::package_var1 = 2


