パスワードを忘れた? アカウント作成
11027112 story
Perl

Perl 5.20 リリース 23

ストーリー by hylom
6が来ないまま5系のアップデートは続く 部門より
あるAnonymous Coward 曰く、

Perl 5.20 がリリースされました(リリース告知変更内容SourceForge.JP Magazine)。

Perl 5.20では、新たにサブルーチンシグネチャが導入され、サブルーチンに与えられた引数を格納する変数を以下のような形で指定できるようになっている。

sub foo($bar, $hoge) {

}

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2014年06月02日 19時55分 (#2613669)

    ん?なにが変わったんだろ?と一瞬分からなかった。
    最近PHPの案件が多かったせいでその書き方に違和感が無くなってたんだな。

    • 変更内容とか見ても、my($a,$b)=$_とは違いますと、否定文の説明しか無いので、ライバルPHPに似せるために、新たな概念の変数を導入したんじゃないかな?シンタックスシュガーでは無いようだ。
      --
      -- 哀れな日本人専用(sorry Japanese only) --
      親コメント
      • by taka2 (14791) on 2014年06月02日 20時38分 (#2613703) ホームページ 日記

        単に my($bar,$hoge)=@_;としただけだと、関数呼び出し時の引数型チェックが行われません。

        sub foo($$) {
            my ($bar, $hoge) = @_;
            …
        }

        と等価って感じじゃないかな。こう書いた場合は、関数fooの呼び出しで引数がスカラー値2つじゃなかったらエラーになります。

        こう書くよりは直感的(というかC言語的というか他のC言語系スクリプト言語に近い)だしわかりやすいと思いますが、Experimental だし、既存のPerlでも動くようにってことを考えると、しばらくは使えないなぁ。

        今後より大きな仕様変更が入って「今からPerl Scriptを書くなら、5.2x移行じゃないとやってらんねー」って時代が来て、なおかつ「今時Perlは5.2xだろ」っていう、5.2xが当たり前な状況になって、やっと、このシグネチャ機能を気兼ねなく使えるようになると思いますが…はてさて一体何年後になるやら。

        親コメント
        • by fcp (32783) on 2014年06月02日 22時28分 (#2613765) ホームページ 日記

          Perl 5.20 の perlsub (英語) [metacpan.org] とかを読んでちょっと調べてみた。

          単に my($bar,$hoge)=@_;としただけだと、関数呼び出し時の引数型チェックが行われません。

          sub foo($$) {
              my ($bar, $hoge) = @_;
              …
          }

          と等価って感じじゃないかな。こう書いた場合は、関数fooの呼び出しで引数がスカラー値2つじゃなかったらエラーになります。

          だいたい等価だけれど、完全に等価ではないのでメモ。

          従来のプロトタイプはサブルーチンの本体の一部にはならないので、サブルーチンへの参照を使って呼び出した時にはチェックされない。

          sub func($$) {}
          my $ref = \&func;
          &$ref(1); # エラーも警告もなし

          これに対し、新しいシグネチャーはサブルーチンの本体の一部なので、参照を使って呼び出した時でもチェックされる。

          use feature 'signatures';
          sub func($left, $right) {}
          my $ref = \&func;
          &$ref(1); # エラー: Too few arguments for subroutine

          ほかにも何か違いがあるかも。

          親コメント
          • by Anonymous Coward

            現実の挙動は、こうですね。

            % export PERL5OPT=''
            % perl -MO=Deparse -Mfeature=signatures -le 'sub func($a, $b){} ;my $ref =\&func ; $ref->()'
            The signatures feature is experimental at -e line 1.
            BEGIN { $/ = "\n"; $\ = "\n"; }
            sub func {
                    use feature 'signatures';
                    die 'Too many arguments for subroutine' unless @_ = 2;
                    my $a = $_[0];
                    my $b = $_[1];
                    ();
            }
            use feature 'signat

        • by arlz (45121) on 2014年06月02日 23時03分 (#2613788)

          わかります。

          未だに非破壊置換オプションを使うのに躊躇するのですが…
          もう 3 年も前なのですね。

          http://perldoc.jp/docs/perl/5.14.0/perl5140delta.pod#Non-destructive32... [perldoc.jp]

          親コメント
        • by Anonymous Coward

          後はデフォルト値の指定がちょっと簡単になりそう。
          試してないけど。

          確かにポータブルなコードにはまだ使えませんが、それはどんな新機能でも基本的には同じこと。
          # あるPHPコードにPHP4用の分岐を入れたのは一昨年だったか去年だったか。

    • by Anonymous Coward

      もう忘れてよい言語だな>Perl

  • by Anonymous Coward on 2014年06月02日 20時10分 (#2613682)

    結局スクリプト言語も速度優先のようですね。

  • 省略こそがParlの美学だと思ってたんだけど
    日和った?

  • by Anonymous Coward on 2014年06月02日 21時04分 (#2613718)

    まだどっかでやってはいるんだろうけど。

    • by Anonymous Coward

      Perl 5の後継ではないと宣言=事実上の開発終了宣言

    • by Anonymous Coward
      羽化出来ないまま、煮られて食われてしまいました。
  • by Anonymous Coward on 2014年06月02日 21時09分 (#2613724)

    勝手に「とうとうPerlにも関数型プログラミングの波が…」と思ったら、
    全く関係ない機能だし、以前からそれっぽいことは普通に出来てたんですね。

    ごめんよ、ラリー・ウォール。

  • by Anonymous Coward on 2014年06月03日 0時07分 (#2613820)
    よくいく書店からはPerlなんて撤去されたんだが・・・。
    新しい本は出ないし、古い本をかえば、「ソレモダンジャナイカラ」
    って魔法を使うし。
    どうしたいんだろね。この言語。
  • by Anonymous Coward on 2014年06月03日 11時35分 (#2614069)
    Perl を超えるワンライナー向け言語は未だ存在していない。
    反論は歓迎するが、例示を求む。
  • by Anonymous Coward on 2014年06月04日 20時16分 (#2615243)

    おかげで Perl にそまらなくてすんだけど

typodupeerror

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

読み込み中...