サブルーチンをサブルーチン内で宣言して
呼び出すとどうなるのか。
急に気になったのでやってみた。
#!/usr/local/bin/perl # nest_sub1.pl use strict; use warnings; use 5.010; sub a_nest(_) { say; sub b_nest(_) { say; } b_nest; } a_nest for 1 .. 5; say '----------------'; b_nest for 6 .. 10; __END__
$ ./nest_sub1.pl 1 1 2 2 3 3 4 4 5 5 ---------------- 6 7 8 9 10
6〜10が出たということは、a_nest()が呼ばれてる度にb_nest()が作られているというわけではなさそう。
じゃあb_nest()の中でa_nest()って呼べるのか?
#!/usr/local/bin/perl # nest_sub2.pl use strict; use warnings; use 5.010; sub a_nest(_) { say; sub b_nest(_) { say; a_nest(); } } a_nest for 1 .. 5; say '----------------'; b_nest for 6 .. 10; __END__
$ ./nest_sub2.pl 1 2 3 4 5 ---------------- 6 6 7 7 8 8 9 9 10 10
呼べた。
じゃあa_nest()の中でa_nest()って呼べるのか?
#!/usr/local/bin/perl # nest_sub3.pl use strict; use warnings; use 5.010; sub a_nest(_) { say; sub b_nest(_) { say; } a_nest(); } a_nest for 1 .. 5; say '----------------'; b_nest for 6 .. 10; __END__
$ ./nest_sub3.pl 1 1 1 1 1 1 1 ………… 1 ^C
呼べた、が、無限ループこわい。ひふみよひふみよ。
まあ普通はこんな使い方しないわな。
でもサブルーチン内でサブルーチン作ってるのは見たことあるなあ。
メリットあるのかな。
外からでも呼べるのに。