Object Oriented Perl DocumentWorkSpace

 Object Oriented Perl DocumentWorkSpace>>


<<CONTACT>>

下記フォームに必要事項を入力後、確認ボタンを押してください。

ご用件
お名前 ※必須
会社名 ※必須
電話番号(半角) ※必須
Mail(半角) ※必須
性別 男 
年齢
サイトを知ったきっかけ 友人・知人  検索エンジン
お問い合わせ内容

 



X.Perl PROGAMMING[SubRoutine]

1.Perl SubRoutine

(1)サブルーチンの定義  スクリプトが大きくなると同じルーチン(命令の集まり)が何箇所にも現れることがあります。そのため、共通して使えるプログラムをおくことで効率的且つ綺麗なプログラムにすることが可能です。この共通に使えるスクリプトをサブルーチンと呼びます。 @ サブルーチン記法   サブルーチンは予約語subを用いて定義します。   ● sub サブルーチン名{ 命令1 命令2} A サブルーチンの呼び出し  サブルーチンの呼び出すにはサブルーチンの前に&をつけます。   ● &サブルーチン名

#サブルーチンの呼び出し
&hello;
#サブルーチンの定義
sub hello{
	print "Hello";
}
 サブルーチンからサブルーチンを呼び出す場合は次の通りです。
&hello;
サブルーチンhelloの定義
sub hello{
	print "Hello";
	&hello2; サブルーチンhello2の呼び出し
}
sub hello2{
	print "TARO\n";
}
A 変数を引数として渡す場合
#数字をキー入力する
print "数字を入力して下さい:";
chomp($num1=);
print "数字を入力して下さい:";
chomp($num2=);
サブルーチンFの呼び出し
&F($num1,$num2);
サブルーチンFの定義
sub F{
	$m=$_[0]*$_[1];
	print "$_[0]*$_[1]=$m";
}
B サブルーチンでリストを返す  サブルーチンs_subを呼び出し、その戻り値リストを配列@xに代入するプログラムです。
@x=&s_sub(200,199,60,50);
#結果の表示
print "s(200)=@x[0]\n";
print "s(199)=@x[1]\n";
print "s(60)=@x[2]\n";
print "s(50)=@x[3]\n";
#サブルーチンs_subの定義
sub s_sub{
	$a=s_sub $_[0];
	$b=s_sub $_[1];
	$c=s_sub $_[2];
	$d=s_sub $_[3];
	return($a,$b,$c,$d);
}

2.グローバル変数とローカル変数

(1)ローカル変数  スクリプト全体で有効な変数をグローバル変数と呼びます。一方でサブルーチン内だけで有効な変数をローカル変数と呼びます。perlでは特に指定しなければグローバル変数として扱われます。一方でローカル変数はサブルーチン内でmy関数またはlocal変数で定義します。my関数で定義したローカル変数とlocal関数で定義したローカル変数の違いは、「local関数」は定義したローカル変数はサブルーチン内と呼び出したサブルーチン内で有効であり、my関数で定義した場合は、定義したサブルーチン内だけで有効です。
●グローバル変数(global):スクリプト全体で有効
●ローカル変数(local):定義したサブルーチン内と呼び出したサブルーチン内で有効
●my関数で定義(my):定義したサブルーチン内だけで有効
$a=300;
$b="xyz";
print "a=$a,b=$b 初期値\n";
&pri;#サブルーチンpriの呼び出し
print "a=$a,b=$b サブルーチン呼び出し後の値\n";
#サブルーチンpriの定義
sub pri{
	my $b;#myは定義したローカル内だけで有効なローカル変数
	$a=400;
	$b="abc";
	print "a=$a,b=$b サブルーチン内での値\n";
}
(2)値渡しと参照渡し @ 参照渡し  サブルーチンに渡された引数は,$_[0],$_[1]に格納されますが、$_は引数の変数の場所を直接指している変数なので、$_の内容を書き換えると呼び出し元の変数の値がかわってしまいます。このような引数の渡し方を参照渡しとよびます。
$n=100;
print "n=$n サブルーチン呼び出し前\n";
&conv($n);サブルーチンの呼び出し
print "n=$n サブルーチン呼び出し後\n";
サブルーチンの定義
sub conv{
	$_[0]=500;
}
 このプログラムでは次のように出力されます。  n=100 サブルーチン呼び出し前  n=500 サブルーチン呼び出し後 A 値渡し  対して$x=$_[0];を実行すると$_[0]のコピーがローカル変数$xに代入します。その結果$x=30を実行してもグローバル変数$nに影響を与えることはありません。このような引数の渡し方を値渡しと呼びます。
$n=100;
print "n=$n サブルーチン呼び出し前\n";
&dainyu($n);サブルーチンの呼び出し
print "n=$n サブルーチンの呼出し後\n";
sub dainyu{
	my $x=$_[0];
    print "x=$x サブルーチンの呼出し中\n";
  $x=500;
    print "x=$x サブルーチンの呼出し時\n";
}
 このプログラムでは次のように出力されます。  n=100 サブルーチン呼び出し前  x=100 サブルーチンの呼出し中  x=500 サブルーチンの呼出し時  n=100 サブルーチンの呼出し後