職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

perlとサブルーチン

2018年01月22日 | perl
perlとサブルーチン


【環境条件】
Eclipse 4.4(ルナ)
XAMPP 1.8.3 
Perlは既にインストール済み

【サブルーチン】
サブルーチン→プログラム中で何回も使用するコードをサブルーチンとして独立し、必要に応じて呼び出すことでプログラムを簡素化して見やすくする。

・サンプルプログラム「test01.pl」
use strict;
use warnings;
my @city = ("東京", "大阪", "名古屋");
&dispArrayValue(@city);
#逆順
my @rcity = reverse(@city);
&dispArrayValue(@rcity);

sub dispArrayValue{
my @array = @_;

print "配列の要素を出力します\n";
foreach my $var(@array){
print "$var\n";
}
}
・結果
配列の要素を出力します
東京
大阪
名古屋
配列の要素を出力します
名古屋
大阪
東京

2)サブルーチンの定義
書式
sub サブルーチン名{
実行する処理;
}

位置
サブルーチンの位置はプログラム中のどこで定義しても構いませんが、一般的には最初か、最後に置く

サブルーチンの実行
プログラム内からサブルーチンを呼び出さない限り実行されません。

・サンプルプログラム「test02.pl」
use strict;
use warnings;
#サブルーチン
sub hello{
print "hello\n";
}

print "サブルーチンのテスト\n";

#サブルーチン
sub bye{
print "bye\n";
}

&hello;
&bye;
print "終了\n";

・結果
サブルーチンのテスト
hello
bye
終了

3)引数
サブルーチンを呼び出す時に、複数の値を渡す時に使用する。
書式
&サブルーチン名(引数1, 引数2, ...);

sub サブルーチン名{
実行する処理;
}

・サンプルプログラム「test03.pl」
use strict;
use warnings;
&calcAverage(10, 8);
&calcAverage(5, 17);

#サブルーチン
sub calcAverage{
my $ave;
$ave = ($_[0] + $_[1]) / 2;
print "$_[0] と $_[1] の平均値は $ave です\n";
}

・結果
10 と 8 の平均値は 9 です
5 と 17 の平均値は 11 です

4)引数を任意の変数に格納
サブルーチン側では、呼び出し元から渡されてきた引数をデフォルトの配列変数「$_」に格納します
・サンプルプログラム「test04.pl」
use strict;
use warnings;
&personal("加藤", 25, "東京都");

sub personal{
my ($name, $old, $address) = @_;#配列

print "名前は $name です\n";
print "年齢は $old です\n";
print "住所は $address です\n";
}
・結果
名前は 加藤 です
年齢は 25 です
住所は 東京都 です

5)戻り値
サンプル「test05.pl」
use strict;
use warnings;

my ($sum, $str);

$sum = &calcTwoNum(10, 23);#戻り値
print "$sum\n";

$sum = &calcTwoNum(32, 14);#戻り値
print "$sum\n";

sub calcTwoNum{
my ($num1, $num2) = @_;

$num1 + $num2;
}
・結果
33
46

6)return文
サブルーチンではブロックの最後まで処理が進むと呼び出し元に返りますが、任意の位置で即座に呼び出し元に処理を返すことが出来る
サンプル「test06.pl」
use strict;
use warnings;
my $msg;

$msg = &hantei(72, 84);
print "$msg\n";

$msg = &hantei(92, 80);
print "$msg\n";

sub hantei{
my ($kokugo, $suugaku) = @_;

if ($kokugo < 75){
return "不合格";
}

if ($suugaku < 75){
return "不合格";
}

return "合格";
}


・結果
不合格
合格
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする