同じ処理を何度も使う場合はサブルーチンを使いますが、スクリプトが長くなって
くると、どこでどのような変数を使ったかを忘れがちで、特に色んなスクリプトを
作成すると、受け取ったデータのデコードや日時の整形など、他で使ったルーチン
を使い回す事があると思います。
その際に、サブルーチンが他の処理に全く関わらず、データを渡すと期待した値
を返すだけの存在であれば、変数の管理がとても楽になります。
ローカル変数は my と local がありますが、localより myの方がより狭い範囲のみ有効です。
例えば my はサブルーチンなどのブロック内のみで有効で、宣言されたサブルーチンの中
から別のサブルーチンなどで呼び出された場合も上書きされません。
local の場合は範囲がもう少し広く、例えばサブルーチンので定義し、別のサブルーチンで
値の上書きができます。
ただ my は Perl5 から実装されていますので、 Perl4 の場合は利用できません。
【ローカル変数を使っていない例】
これだけの内容であれば間違って変数や配列を上書きする事はありませんが、
何度も繰り返し処理をする場合、サブルーチン内ではローカル変数にします。
【ローカル変数を使った例】
サブルーチンの先頭付近で my ($formin,$name,$value,$tmp,@indata); として、使用する変数や
配列をローカル変数としています。
my ($aaa,$bbb) = @_; などとすれば、ローカル変数の宣言と同時に値を入れる事ができます。
変数が上書きされてしまう例
【上書きされる例】
例えば下の例では、変数 $aaa に 5000000 が入っていますので、画面表示の際にも表示されるはず
ですが、サブルーチン内で同じ変数を使っている為、値が上書きされてしまっています。
【ローカル変数を使った例】
下のように、サブルーチン内で使用する変数をローカル変数にする事で、上書きが回避できます。
サブルーチン内で 変数 $aaa を使っていますので上書きされそうですが、 my宣言してあるので、
別の場所で使われている 変数は上書きされません。
|