これはMoritz Lenz氏のWebサイト Perlgeek.de で公開されているブログ記事 "Perl 5 to 6" Lesson 18 - Scoping の日本語訳です。 原文は Creative Commons Attribution 3.0 Germany に基づいて公開されています。 本エントリには Creative Commons Attribution 3.0 Unported を適用します。 Original text: Copyright© 2008-2010 Moritz Lenz Japanese translation: Copyright© 2011 SATOH Koichi NAME "Perl 5 to 6" Lesson 18 - Scoping SYNOPSIS for 1 .. 10 -> $a { # ここは$aが見える } # ここは$aが見えない while my $b = get_stuff() { # ここは$bが見える } # ここでも$bが見える my $c = 5; { my $c = $c; # ここで$cがundefになる } # ここでは$cは5 my $y; my $x = $y + 2 while $y = calc(); # まだ$xが見える DESCRIPTION 字句的スコープ Perl6のスコープはPerl5に非常によく似ています。ブロックは新しい字句的スコープを導入します。 変数名は最も内側の字句的スコープから探索され、もし見つからなければ一つ外側のスコープを、といった手順で探索されます。 Perl5と同様に my 変数は完全な字句的スコープ変数であり、 our 宣言はパッケージ変数に字句的スコープを持った別名を作ります。 ただしちょっとした違いがあります: 変数はブロックの宣言された位置より後で可視であり、ブロックのヘッダ(例えば while ループの条件節など)で宣言された変数はブロック内に限定されません。 スコープを限定したいときはブロックの形式的パラメータが使えます: if calc() -> $result { # ここでは$...