1

perl の振る舞いを簡単な表現で説明することはできません。問題をこの比較的短い perl コードに切り分けました。make_peak は、シグナル v() の最大値を追跡し、この最大値をクロージャ変数 $max に保持する関数を返します。

そのまま、コードは「2」を出力します。しかし、不器用な「」を削除すると。return ステートメントで、$p->() は undef? を返します。

use strict;

our $i=0;

sub v($) {
  $i=$i+1;
  return $i;
}

sub make_peak($)
{
  my $vi=$_[0];
  my $max=-1e35;
  return sub() {
    $max=v($vi) if v($vi)>$max;
    return "".$max; # ??? without the kludge returns empty line
  };
}

my $p=make_peak(10);

my $m=$p->();
print $m;
4

2 に答える 2

0

これは、お使いのバージョンの Perl のバグのようです。実行中

This is perl 5, version 14, subversion 2 (v5.14.2) built for i686-linux-gnu-thread-multi-64int

その行の有無にかかわらず、出力として「2」を取得し"".ます。

于 2013-04-03T18:20:00.973 に答える