Perlのサブルーチン

Perlのリファレンス渡しについてです。

Perl入学式2013の第4回資料の一部を元に考えました。

https://github.com/perl-entrance-org/workshop-2013-04/blob/master/slide.md

例題として、ベクトルの内積を求めるサブルーチンを考えます。

ポイントは、サブルーチンに配列を渡すとき、

  • 配列をそのまま引数で渡すと、中身が展開されてしまう。
  • 展開されないようにするために、リファレンスで渡す。

のように理解しました。
まあ、合っているかどうかわかりませんが・・・。

Perl入学式の第4回では、ここら辺を確認したいと思います。

use strict;
use warnings;

my @a = qw/ 1 2 /;
my @b  = qw/ 2 3 /;
# 内積
sub dot {
    my ($v1, $v2) = @_;
    my $result = 0 ;
    # ベクトルの次元は2
    for my $i (0..1) {
	$result += @$v1[$i]*@$v2[$i];
    }
    return $result;
}
# 各配列を区別したい場合はリファレンス渡しにする
my $out = dot(\@a, \@b);
print "$out"."\n";