#!/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 $num = 1; print "aa0:$num
\n"; # 参照できる } #print $num; # この位置では参照できない print "----------
\n"; #localで変更されたパッケージ変数 #localを使うとパッケージ変数を一時的に変更することができます。この変更された値は、スコープの最後で元に戻ります。 #localは、パッケージ変数の値の一時的な変更にだけ利用して、昔のように変数宣言には使わないようにしましょう。 our $NUM0 = 1; { local $NUM0 = 2; print "cc0:$NUM0
\n"; #2 } print "cc1:$NUM0
\n"; # この位置では1に戻る #------------------------------------------ #スコープの内部で宣言されたパッケージ変数(ourで宣言された変数)は、 #そのスコープの中では部分名で参照できる。 #スコープの外から参照するには完全修飾名を使用する必要がある。 package Foo; { our $NUM = 1; print "bb0:  $NUM
\n"; # 部分名で参照できる } #print $NUM,"
\n"; # 部分名では参照できない print "bb1:  $Foo::NUM 
\n"; # 完全修飾名で参照できる #---------------------------------------- our $var = 123; { local $var = 345; &say_var; } &say_var; sub say_var { print "\$var :",( $var // "undefined" ),"
\n"; } print "----------
\n"; my $word = "晴れ"; &foo; sub foo { $word = "雨"; print "1:",$word,"
\n"; #雨 &yesterday; print "4:",$word,"
\n"; #雨1111 } sub yesterday { print "2:",$word,"
\n"; #雨 $word = "雨1"; &tommorow; } sub tommorow { print "3:",$word,"
\n"; #雨1 $word = "雨11"; } print "5:",$word,"
\n"; #晴れ 雨1111 print "----------
\n"; print "\n"; print "\n";