パッケージサブルーチンとbless
えーと実は、サブルーチンは必ずどこかのパッケージに属しています。
そう、パッケージ宣言しないと自動的にmainパッケージになるのです。
そして、サブルーチンのコールには、以下の4通りがあるのです(他にもあるかも)。
- パッケージデリミタを使ってサブルーチンコール
- 矢印演算子を使ってサブルーチンコール
- blessを使ってサブルーチンコール
- 無名サブルーチンリファレンスを使ってサブルーチンコール
◆サンプル(bless.pl)
use strict; use warnings; # 1.パッケージ名からパッケージデリミタを使ってサブルーチンコール main::test(10); package01::test(10); package01::test2(100); # 2.パッケージ名から矢印演算子を使ってサブルーチンコール main->test(20); package01->test(20); package01->test2(200); # 3.blessを使ってサブルーチンコール my $test; $test = bless \$test, 'main'; $test->test(30); $test = bless \$test, 'package01'; $test->test(30); $test->test2(300); # 4. 無名サブルーチンリファレンスを使ってサブルーチンコール $test = sub {print "無名サブルーチンで引数は-->@_<--です。", "\n"; }; $test->(40); sub {print "無名サブルーチン2で引数は-->@_<--です。", "\n"; }->(400); # 即実行 sub test { print "mainパッケージのサブルーチンで引数は-->@_<--です。", "\n"; } package package01; sub test { print "package01パッケージのサブルーチンで引数は-->@_<--です。", "\n"; } sub test2 { print "package01パッケージのサブルーチン2で引数は-->@_<--です。", "\n"; }
◆実行結果
C:\samp_pl>perl bless.pl mainパッケージのサブルーチンで引数は-->10<--です。 package01パッケージのサブルーチンで引数は-->10<--です。 package01パッケージのサブルーチン2で引数は-->100<--です。 mainパッケージのサブルーチンで引数は-->main 20<--です。 package01パッケージのサブルーチンで引数は-->package01 20<--です。 package01パッケージのサブルーチン2で引数は-->package01 200<--です。 mainパッケージのサブルーチンで引数は-->main=REF(0x1ac65d0) 30<--です。 package01パッケージのサブルーチンで引数は-->package01=REF(0x1ac65d0) 30<--です。 package01パッケージのサブルーチン2で引数は-->package01=REF(0x1ac65d0) 300<--です。 無名サブルーチンで引数は-->40<--です。 無名サブルーチン2で引数は-->400<--です。