ネストした関数

Variable "%s" will not stay shared というエラーを探していて発見した.

perldoc perldiag らしい.
そうだなぁ.関数がネストするとレキシカルスコープと似合わない.
デフォルトだと関数定義がパッケージスコープだから,
クロージャーをレキシカルスコープに抑えればいいのは同意.

これとは別に,単に変数を共有したい場合は,外側のスコープを作ればいい.

{ # $c のスコープ
    my $c;
    sub t1 { $c };
    sub t2 { $c };
}
t1;
t2;

JavaScript は,へーって思った.
function をネストするとローカルスコープになるのかぁ.
完全に忘れてるな.
Schemer 観点だと普通な感じ.

>>> (function () { function fff () { alert("called fff"); } })(); fff();
ReferenceError: fff is not defined
> ((lambda () (define (a) (print "a"))))  
#<undef>
> (a)
*** ERROR: unbound variable: a