オンラインのPerlスクリプトの例では、変数名の前に「my」キーワードが表示され続けますが、その意味がわかりません。マニュアルページや他のサイトをオンラインで読みましたが、使用方法とマニュアルの違いを考えると、それが何であるかを判別するのが困難です。
たとえば、この投稿で配列の長さを取得するために使用されます: Perlで配列のサイズを見つける
しかし、マニュアルには次のように書かれています:
Myは、リストされた変数を、囲んでいるブロック、ファイル、またはevalに対してローカル(辞書式)に宣言します。複数の値がリストされている場合は、リストを括弧で囲む必要があります。
それは何をし、どのように使用されますか?
my
は、変数の scope を制限します。変数のスコープは、それが見える場所です。変数のスコープを変数が必要な場所に縮小することは、優れたプログラミングの基本的な側面です。これにより、コードが読みやすくなり、エラーが発生しにくくなり、多くの利点が得られます。
my
を使用して変数を宣言しない場合、代わりにグローバル変数が作成されます。これは避けるべきです。 use strict;
を使用すると、Perlに暗黙的にグローバル変数を作成しないように指示するため、プログラムで常にuse strict;
(およびuse warnings;
)を使用する必要があります。
簡単な要約:my
は新しい変数を作成し、local
は変数の値を一時的に修正します
以下の例では、$ :: aは 'global'名前空間の$ aを参照しています。
$a = 3.14159;
{
my $a = 3;
print "In block, \$a = $a\n";
print "In block, \$::a = $::a\n";
}
print "Outside block, \$a = $a\n";
print "Outside block, \$::a = $::a\n";
# This outputs
In block, $a = 3
In block, $::a = 3.14159
Outside block, $a = 3.14159
Outside block, $::a = 3.14159
つまり、local
は一時的に変数の値を変更しますが、変数が存在するスコープ内でのみです。
ソース: http://www.perlmonks.org/?node_id=94007
更新
our
とmy
の違いについてをご覧ください
(ThisSuitIsBlackNot)に感謝します。
my()によるプライベート変数 は、my
の主要なドキュメントです。
あなたが言及した配列サイズの例では、配列のサイズを見つけるために使用されていません。配列のサイズを保持する新しい変数を作成するために使用されます。