Memoize

BasicWerk   EC Support   Technique   Facebook  

20141121120907_Perl_no_name_sub

Perl_no_name_sub

 

 

無名サブルーチンの基本的な文法

 
sub { body };
 
my $fn = sub { my $arg = shift; print "$arg\n"; };
$fn->('some-value');
# or
&$fn('some-value');
 

 

サブルーチンへのリファレンスは単なるスカラーなので、ハッシュや配列に格納できる。

 
# 上の $fn を流用
my %hash = ();
for my $name (qw( ken john jonny )){
    $hash{$name} = $fn;
}
 
for my $name (keys %hash){
    # それぞれの名前を print する。
    $hash{$name}->($name);
}
 
 
# 複数のサブルーチンを配列に格納しておいて
my @fns = (
    sub {
        my $value = shift;
        $value =~ s/ /_/g;
        return $value;
    },
    sub {
        my $value = shift;
        return uc($value);
    },
);
 
my @values = map 
    {
        my $value = $_;
        for my $fn (@fns){
            # 上書き
            $value = $fn->($value);
        }
        $value;
    } ("ah huum", "oh yes");
 
print "@values\n";
# -> AH_HUUM OH_YES
 

 


© Shin Nakamura/BasicWerk 2014