#!/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";