7

症状:$c="foo";エラーがスローされますが、スローされ$b="foo";ません。

私のスクリプトは文字通り 3 行です。以下はエラーや警告を生成しませんが
use strict;
$b = "foo";
print $b;
、以下に変更すると、「明示的なパッケージ名が必要です」というエラーが発生します。
use strict;
$c = "foo";
print $c;

use strict;使用前に変数を宣言する必要があることを理解しており、変更$c = "foo";するとmy $c = "foo";実際にエラーが防止されますが、これだけでは不一致は説明できません。

誰かがここで光を当てることができますか? 明らかな何かが欠けていると確信しています。Windows 7 x64 で Strawberry Perl v5.16.3 を実行しています。npp で編集し、コマンド ラインからスクリプトを実行しています。c:\strawberry> perl test.pl

4

2 に答える 2

17

厳密なドキュメントから:

sort() による特殊な使用のため、変数 $a と $b はこのチェックから除外されます。

于 2013-07-15T21:01:15.523 に答える
8

$_$a、などの一部のグローバル変数は、$b効果的に事前宣言されています。したがって、$aおよび変数は、ブロック$b内で追加の宣言なしで使用できます。これらの変数には、次の 2 つの項目の値があります。sort

use strict;
my @nums = (1, 5, 3, 10, 7);
my @sorted = sort { $a <=> $b } @nums
于 2013-07-15T21:02:19.347 に答える