#!/usr/local/bin/perl use strict; use warnings; use utf8; print "Content-type: text/html; charset=utf-8\n\n"; print "\n"; print "\n"; print "\n"; print "CGI test\n"; print "\n"; print "\n"; print "------------------
\n"; # ☆☆☆  サブルーチン内で変数がmy宣言された場合 ☆☆☆ #サブルーチン内でのみ有効。そのサブルーチン内で更にサブルーチンを使用した場合 #一番外側の宣言が有効。従って、下位の入れ子内で値を変更した場合でも、 #その値が保持される。 #my宣言された場合に影響のある範囲はそのスコープの中だけ。その他の{}の中には #影響を与えないし、影響も受けない。 my $var = 'aa1'; &example2; sub example2 { #このスコープの間でのみmyは有効 my $var = 'a2'; print "  ex2:$var
\n"; # a2 &example3; print "  ex22:$var
\n"; # a2 } sub example3 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  ex3:$var
\n"; # aa1 $var = 'a3'; &example4; } sub example4 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  ex4:$var
\n"; #a3 $var = 'a4'; &example5; print "  ex44:$var
\n"; #a6 $var = 'a44'; } sub example5 { #このスコープの間でのみmyは有効 my $var = 'a5'; print "  ex5:$var
\n"; #a5 &example6; print "  ex55:$var
\n"; #a5 } sub example6 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  ex6:$var
\n"; #a4 &example7; print "  ex66:$var
\n"; #a9 $var = 'a6'; } sub example7 { #このスコープの間でのみmyは有効 my $var = 'a7'; print "  ex7:$var
\n"; #a7 $var = 'a77'; &example8; print "  ex77:$var
\n"; #a77 $var = 'a777'; } sub example8 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  ex8:$var
\n"; #a4 &example9; print "  ex88:$var
\n"; #a9 } sub example9 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  ex9:$var
\n"; #a4 $var = 'a9'; } print "no1: $var
\n"; # a44 # 変数をサブルーチンに引き継ぐ場合には、、引数を与える。 $var = 'bb0'; &sss1; sub sss1 { #このスコープの間でのみmyは有効 my $var = 'b1'; print "  sx1:$var
\n"; #b1 &sss2($var); } sub sss2 { #このスコープの間でのみmyは有効 my($var) = @_; print "  sx2:$var
\n"; #b1 &sss3; } sub sss3 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  sx3:$var
\n"; #bb0 &sss4; } sub sss4 { #このスコープの間でのみmyは有効 my $var = 'b4'; print "  sx4:$var
\n"; #b4 &sss5; } sub sss5 { #このスコープの間は一番上のスコープと同じmyの領域となる print "  sx5:$var
\n"; #bb0 $var = 'b5'; } print "so1: $var
\n"; #b5 print "------------------
\n"; print "\n"; print "\n";