燈明ブログ

現状は小池啓仁の応援ブログ

Perlの謎(その3):subのデフォルトのリターン値

Perlでのサブルーチンは、実は関数とイコールです。


そもそも、サブルーチンと関数の違いは、リターン値を返すか返さないかの違いです。
しかし、Perlでは、サブルーチンでもリターン値を返すことができるので、事実上、関数とイコールなのです。


Perlのサブルーチンはsubキーワードから書き始めます。
リターン値はreturnキーワードで記述します。


しかし、returnキーワードをあまり見かけないのです。
またしかし、それでもリターン値が返って来ているみたいなのです。


そう、実は、returnキーワードは省略可能なのです。
Perlでは、サブルーチンの最後に評価した式の値が、returnキーワードがあってもなくても、リターン値になるのです。

use strict;
use warnings;

sub closure {
    my $value = shift;
    sub { $value++ };   # return sub { $value++ }; と等価
}

Perlをやり始めると、subだし、returnキーワードはないケースが多いし、本当にリターン値が返っているのだろうか・・・。
なんて、悩む時期があるのです。


とにかく、サブルーチンの最後に評価した式の値が、returnキーワードがあってもなくても、リターン値になるのです!