15
これはなぜそれが代わりに別々の文で字句変数を宣言して初期化する理由は何ですか?
my $read_watcher = AnyEvent->io (...
の
my $read_watcher; $read_watcher = AnyEvent->io (...
を使用していますか?AnyEvent::Intro
# register a read watcher
my $read_watcher; $read_watcher = AnyEvent->io (
fh => $fh,
poll => "r",
cb => sub {
my $len = sysread $fh, $response, 1024, length $response;
if ($len <= 0) {
# we are done, or an error occurred, lets ignore the latter
undef $read_watcher; # no longer interested
$cv->send ($response); # send results
}
},
);
からの抜粋ですか。
新竹園:試してみましたか?厳しい? "グローバルシンボル" $ read_watcher "明示的なパッケージ名が必要"を投げることは、後者ではかなりの違いです。厳密でなくても、字句$ read_watcherはコード範囲内の$ read_watcherスコープのパッケージとは異なる変数になります。 – MkV
From AnyEvent :: Intro:これは、Perlが動作する際の癖です。「my」で宣言された変数名は、次のステートメントでのみ表示されます。コールバックを含む "AnyEvent-> io"呼び出し全体が単一の文で実行される場合、コールバックは$ read_watcher変数を参照して "undef"にすることができないため、2つのステートメントで実行されます。 – MkV