Perl 5 の進化は止まらない!

Perl です。懐旧の念さえ覚えかねない、かつての Web プログラミング界の覇者です。Perl 6は一向に完成しないようですが、Perl 5 は着実にアップデートし続けています。

ともあれ、5/28 に Perl 5.20.0 というバージョンが登場したそうです。何と、このバージョンではサブルーチンにシグネチャを付することができます。

マジ?ということで、試してみました。

#!/usr/bin/env perl

use 5.020;
use feature "signatures";
no warnings "experimental::signatures";

use utf8;

binmode STDOUT, ":utf8";

sub greet($name="太郎") {
    say "こんにちは、$name!";
}

greet;

package Hoge {
    sub new($class, $name="太郎") {
        bless {
            name => $name,
        }, $class;
    }

    sub greet($self) {
        say "こんにちは、${\$self->{name}}!";
    }

    1;
}

Hoge->new("花子")->greet;

実行結果:

こんにちは、太郎!
こんにちは、花子!

おお、すごい!他の言語で当たり前にできることが Perl でもできるようになりました!

なんのこっちゃ、という人のために、旧来の Perl で動作するバージョンも載せましょう。

#!/usr/bin/perl

use 5.018;
use utf8;

binmode STDOUT, ":utf8";

sub greet {
    my ($name) = @_;
    $name //= "太郎";

    say "こんにちは、$name!";
}

greet;

package Hoge {
    sub new {
        my ($class, $name) = @_;
        $name //= "太郎";

        bless {
            name => $name,
        }, $class;
    }

    sub greet {
        my ($self) = @_;

        say "こんにちは、${\$self->{name}}!";
    }

    1;
}

Hoge->new("花子")->greet;

今までサブルーチンの引数は @_ というヘンテコな名前の配列に格納され、これを意味のある名前の変数に代入し直すのが Perl のサブルーチンにおけるお馴染みの儀式でした。が、これとももうオサラバだ!

(コウヅ)

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中