0

この例では:

#!/usr/bin/perl

$a = 4; # Is $a a local variable or a global variable?
print $a, "\n";

$aにはどのようなスコープがありますか?

4

3 に答える 3

7

その特定の変数$aは、 で使用される定義済みの変数ですsort。ただし、使用した場合$xは考慮されます

$main::x;

これは、メイン スクリプトであるパッケージ「main」内のグローバル変数です。

use strictを使用する場合、常にそうすべきであることに注意してください。perl は、変数を使用する際に、具体的にすることを強制します。その場合、単に使用することはできません

$x = 4;

致命的な例外が生成されるため、Global symbol "$x" requires explicit package name at ...通常はmyorを使用ourして変数を宣言します。

my $x = 4;

ただし$main::x、完全な変数名を指定する限り、使用することもできます。

于 2013-01-06T19:19:04.990 に答える
3

[これまでに少し特別だったので(による使用のため) $x、代わりに使用したふりをします。]$a$asort

$ xaはローカル変数ですか、それともグローバル変数ですか?

Perlの2種類の変数は、字句パッケージです。

宣言がない場合[1]、変数はパッケージ変数です[2]。それはあなたがそこに持っているものです。具体的には、これは省略形です$main::xmainコードがコンパイルされるパッケージはどこにありますか)。

パッケージ変数はグローバルです。つまり、コード内のどこからでも見ることができます。$main::xとは言うものの、ある場所からそれらを見るには、フルネーム(例)を使用する必要があるかもしれません。



  1. 宣言されていない変数の使用を明確に禁止するものを常に使用する必要があるため、質問は言い回しのように学術的です。use strict;

  2. 一部の変数(たとえば$_、、、$1など$a)は事前に宣言されているため、これは適用されません。

于 2013-01-06T20:26:53.893 に答える
0

スコープ変数にmyまたはlocalを使用する

myまたはlocalキーワードで宣言されていない限り、Perl の変数は通常、パッケージの名前空間内でグローバル スコープを持ちます。

于 2013-01-06T19:21:30.060 に答える