Perlのサブルーチンシグネチャ(デフォルト引数)の正しい使い方

サブルーチンシグネチャとは

PerlにはサブルーチンシグネチャというJavaScriptのデフォルト引数のようなものがあるのだが、JavaScriptのように普通に指定するだけでは使用できない。

サブルーチンシグネチャを使用するには下記の3点の注意が必要。

1. バージョンをv5.20以上にする

サブルーチンシグネチャはv5.20以上でないと使用できないためv5.20以上をuseで指定する必要がある。

現在だとv5.20未満の環境が多い。

# !/usr/local/bin/perl
use v5.24;
use warnings;

2. サブルーチンシグネチャを有効にする

下記のように指定してサブルーチンシグネチャを有効にする。

use feature signaturesだけだと警告が出るため、no warnings experimental::signaturesも指定しておく。

# !/usr/local/bin/perl
use v5.24;
use warnings;
use feature 'signatures';
no warnings "experimental::signatures";

3. サブルーチンシグネチャにmyを付けない

sub list(my $a = 0)はエラーになる。

普通に下記のようにmyを付けずに記述すると良い。

# !/usr/local/bin/perl
use v5.24;
use warnings;
use feature 'signatures';
no warnings "experimental::signatures";

sub list($a = 0, $b = 3) {
  $a < $b ? $a..$b : $b..$a;
}

my @results1 = list();
my @results2 = list(1, -3);

say "@results1";
# => 0 1 2 3

say "@results2";
# => -3 -2 -1 0 1
カテゴリーPerl