1

いくつかの Perl コードを見ているときに、chr の出力がハッシュに直接割り当てられていることに気付きました。

local %str = chr(shift);

コードが正常に機能したことに戸惑いましたが、これにより、次のことがわかりました。

perl -le 'my $jurso = 23; print $jurso;'
23

perl -le 'my %jurso = 23; print %jurso;'
23

perl -le 'my @jurso = 23; print @jurso;'
23

スカラーをハッシュまたは配列に直接代入するとエラーになると予想していました。使用されているシジルに関係なく、jurso 変数がスカラーのように振る舞う理由を誰かが説明できますか?

ありがとう。

4

1 に答える 1

5

2 つの言葉:コンテキストが重要です。オンにすると、ここで何が起こっているのかを理解しやすくなりますwarnings

> perl -wle 'my %jurso = 23; print %jurso;'
Odd number of elements in hash assignment at -e line 1.
Use of uninitialized value $jurso{"23"} in print at -e line 1.
23

つまり、コードの最初のステートメントは、単一項目リストからハッシュを作成します。これは良い兆候ではありません (通常、ハッシュにはソース リスト内の要素の数が偶数である必要があるため)。したがって、最初の警告が表示されます。それでも、ハッシュが作成されます。キーでアドレス指定された 1 つの要素23があり、この要素の値は ですundef

2 番目のステートメントは、このハッシュを出力しようとします。最初にキー (23) をエコーし​​、次にその値をエコーし​​ます。ご存じのundefように、2 番目の警告です。それでも、この値空の文字列として出力されます。)

配列を使用すると、警告さえ表示されません。

> perl -wle 'my @jurso = 23; print @jurso;'
23

@jurso...最初のステートメントが単一の項目で配列を埋めるため、2 番目のステートメントはこの配列を出力するだけです。繰り返しますが、文脈が重要です。

于 2015-01-01T19:19:43.027 に答える