感想とメモ - すぐわかるオブジェクト指向Perlの第五章を読んだ

  1. すぐわかるオブジェクト指向Perlの第一章を読んだ
  2. すぐわかるオブジェクト指向Perlの第二章を読んだ
  3. すぐわかるオブジェクト指向Perlの第三章を読んだ
  4. すぐわかるオブジェクト指向Perlの第四章を読んだ
  5. すぐわかるオブジェクト指向Perlの第五章を読んだ←今ココ

感想

この章ではサブルーチンのリファレンスを扱います。前回の章と同じく三章でリファレンスの基礎がガッチリと固められているので、リファレンスについて多く語られることはないです。

メモ

この章で学べること一覧

・サブルーチンの復習
・サブルーチンのリファレンス
・無名サブルーチン
・サブルーチン リファレンスの応用
・ハッシュにサブルーチン リファレンスを収納する

普通のサブルーチン

my $sub_result = &tashizan(1,2,3);
print $sub_result;

sub tashizan {
  my ($one, $two, $three) = @_;
  my $result = $one + $two + $three;
  return $result;
}

本書では以下のように説明されている

sub サブルーチン名 {
...
}

サブルーチンをこのように定義して

$戻り値 = &サブルーチン名(引数1, 引数2, ...);

&をつけて呼び出す。


サブルーチンのリファレンス

$codeRef = \&tashizan;
$sub_result = &$codeRef(1,2,3);
print $sub_result;

sub tashizan {
  my ($one, $two, $three) = @_;
  my $result = $one + $two + $three;
  return $result;
}

サブルーチンのリファレンスは「&」で取得できます。それを「&$」でデリファレンスし、リファレンスのサブルーチンを利用できます。サブルーチンをデリファレンスした瞬間にサブルーチンは実行されます。


サブルーチンの矢印記法

$codeRef = \&tashizan;
$sub_result = $codeRef->(1,2,3);
print $sub_result;

sub tashizan {
  my ($one, $two, $three) = @_;
  my $result = $one + $two + $three;
  return $result;
}

前回の&$codeRef(1,2,3)が$codeRef->(1,2,3)に変化しました。これをサブルーチンの矢印記法といいます。


無名サブルーチン

$codeRef = sub {
  my ($one, $two, $three) = @_;
  my $result = $one + $two+ $three;
  return $result;
};

$sub_result = $codeRef->(1, 2, 3);
print $sub_result;

無名サブルーチンはリファレンスを返します。つまり$codeRefはサブルーチンのリファレンスということになります。なので$codeRef->(1, 2, 3)と矢印記法を使ってデリファレンスしてサブルーチンにアクセスすることができます。

すぐわかる オブジェクト指向 Perl

すぐわかる オブジェクト指向 Perl