--- title: '『[新版Perl言語プログラミングレッスン入門編』第10章 サブルーチン' author: kazu634 date: 2008-03-09 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3805;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl - Programming ---

 今日はサブルーチンだよー。

簡単なサブルーチン

use strict;
use warnings;
my ($x, $y) = (123, 456);
&print_xy($x, $y);
sub print_xy {
my ($x, $y) = @_;
print "\$x = $x\n";
print "\$y = $y\n";
}

「&…」でサブルーチン呼び出しという意味になる。「@_」は引数のリストという意味かな?

戻り値のあるサブルーチン

 戻り値のあるサブルーチンは、returnを用いると実現できるよ!

use strict;
use warnings;
print &calc_ave(100, 50, 30, 20) , "\n";
sub calc_ave {
my @nums = @_;
my $sum;
foreach (@nums) {
$sum = $sum + $_;
}
my $ave = $sum / @nums;
return $ave
}

本に載っているやつだと汎用的じゃあなかったから、引数が何個でも大丈夫なようにしてみた。直前の章のコンテクストがうまく理解できている気がする( my $ave = $sum / @nums。この場合スカラーコンテクストだから、@numsは配列の要素数になるんだよね)。