8

use strictandを使用し、データ型use warningを指定すると機能します。my指定しないと、myエラーが表示されます。

use strict;
use warnings;
my $test=10;
my @arr=(10,20,30);

配列変数名を数値として宣言すると、次のようになります。

 use strict;
 use warnings;
 my @100=(10,20,30);

そのプログラムを実行すると、次のエラーが表示されます。

 Can't use global @100 in "my" at number_sclar.pl line 28, near "my @100"

それを削除してmyそのプログラムを実行すると、エラーなしで実行されます。

my変数が数値配列変数名でサポートされていない理由を教えてください。

4

2 に答える 2

9

からperldoc perlvar:

数字、制御文字、または句読点文字で始まる Perl 識別子は、「パッケージ」宣言の影響から除外され、常にパッケージ「メイン」にあることが強制されます。また、「strict 'vars'」エラーからも除外されます。 他のいくつかの名前もこれらの方法で免除されています...

于 2013-05-16T05:39:54.873 に答える
4

$1、$2、$3、$100 などを作成することによる意図しない副作用として (正規表現キャプチャの結果を保持するため); @1、@2、@3、@100 なども作成されます。

しかし、これらの名前とperlvarのほとんどの特別な変数は、パッケージ変数を除いて正式な名前ではありません。たとえば、パッケージ変数[1]の有効な名前であるにもかかわらず、my $(;orを実行することはできません。sub (;$(

レキシカルが 5.6 で Perl に追加されたとき、ユーザー変数にそのような名前を許可することは確かに混乱を招くと考えられていました。実際、誰もその考えを楽しませたことはないと思います。

シジルは別として、レキシカル変数は [a-zA-Z_] [2]の文字で始まる必要があり、その後に [a-zA-Z0-9_] [2]の文字をいくつでも続けることができます。その@100ため、レキシカル変数の有効な名前ではありません。


ノート:

  1. >perl -e"our $(;"
    
    >perl -e"my $(;"
    Can't use global $( in "my" at -e line 1, near "my $("
    Execution of -e aborted due to compilation errors.
    
    >perl -e"sub (;"
    Prototype not terminated at -e line 1.
    
  2. 実際にはより多くのコード ポイントが許可されていますが、それらは ASCII の文字セットの範囲外です。簡単にするために、ASCII の文字セットに含まれるコード ポイントのみをリストしました。

于 2013-05-16T06:10:01.130 に答える