Continue(s)

Twitter:@dn0t_ GitHub:@ogrew

Perlで同じ内容のメソッドを別名で実行したいときのTip

Tipというか小手技。

まずあまり出番はないと思うが、

中身は同じ内容のメソッドだが呼び出し元の都合で別名で読んだ方が可読性が上がる、メンテナンスがやりやすい

みたいな場合がごく稀にある(と思う)。

あるいは「その実装自体を見直した方が良いのでは?」というのはもっともかもしれない。

あくまでTip。

例を挙げる。

package NogizakaClass;

use strict;
use warnings;

sub new {
    my $class = shift;
    my $names = shift;
    bless $names, $class;
}

sub sample_1 {
    my $self = shift;
    for my $name (@{$self}) {
        print "Hello, " . $name . " !!\n";
    }
}

sub sample_2 { shift->sample_1(@_) }

1;

これまた適当に実行するコード。

package NogizakaModule;

use NogizakaClass;
use strict;
use warnings;

my @nogizaka = ("ikoma","ikuta","hoshino");

my $n_class = NogizakaClass->new(\@nogizaka);
$n_class->sample_1();
$n_class->sample_2();

実行結果

Hello, ikoma !!
Hello, ikuta !!
Hello, hoshino !!
Hello, ikoma !!
Hello, ikuta !!
Hello, hoshino !!

ポイントは、

sub sample_2 { shift->sample_1(@_) }

の部分。

shift->で引数をそのまま別の関数に渡す。

特段難しいことはないが、パッと思いつかなかった書き方で、かつクールだなと思ったので備考録として書いておく。

というかどうでもいいけど小手技って誤用ですよね。剣道かよ。

f:id:taiga006:20171218142120j:plain

これは薙刀