2012-05-02 14 views
3

これが最後の文で、「キー」とは何をするのか。また

#!usr/bin/perl 
%vvv = (1,2,3,4,5,6); 
$#vvv--; 
%vvv = reverse %vvv; 
print keys %vvv, "\n"; 

「642」いくつかの私には神秘的な理由の出力のことを、スクリプト全体のですか?御時間ありがとうございます。急いで私は研究をするための適切な時間がありません。だから私は再びあなたに感謝します。

答えて

6

$#vvv--コメントのようです。何が起きているのかは、偶数番号の要素配列であるハッシュがちょうど逆であることです。キーが印刷されたときに、それは642をつかむ、またはハッシュの新しい、現在のキー

%vvv = (
    6 => 5, 
    4 => 3, 
    2 => 1 
); 

:に

%vvv = (
    1 => 2, 
    3 => 4, 
    5 => 6 
); 

:だから、から行きます。

Global symbol "@vvv" requires explicit package name at ... 

$#vvvが配列@vvvの最大インデックス、いないを参照していることを意味します

+7

'$#vvv'はコメントではありませんが、ハッシュには影響しません。 –

+0

あなたと訂正のためのシナンのおかげで。私は#を見てすぐにコメントを考えた。私の間違い! – MadFriarAvelyn

+1

あなたの答えをありがとう。実際に私はちょうどコメントのような行を削除し、同じ結果を得た。しかし、配列には非常によく似た問題があります。同じ行を削除すると、出力が異なります。コードは次の通りです。 '#!usr/bin/perl @vvv =(1,2,3,4,5,6,7); $#vvv--; print $ vvv [$#vvv]、 "\ n"; ' – boogie

20

あなたはいつもあなたが持っていた場合は

use strict; 
use warnings; 

でスクリプトを実行する必要がありますが、あなたはエラーに気づいているだろうハッシュperlでは、@vvv%vvvは2つの別々の変数です。したがって@vvv%vvvとは関係がありません。その操作は一切使用されません。しかし

my @array = 1 .. 6; # 1,2,3,4,5,6 but written as a range 
$#array--;   # lower maximum index by 1 
print "@array";  # prints "1 2 3 4 5" 

、願いハッシュが動作しません。コードはの考えているかもしれない書いた人は、配列を切り捨てるための方法です何

Friarが説明したように、reverseは、ハッシュキーと値をスワップする方法です。文字列に使用すると、文字列を逆にします。 "foobar" - > "raboof"ですが、リスト上で使用すると逆転するので、1,2,3,4,5,66,5,4,3,2,1になります。

+0

これは非常に役に立ちました、ありがとう。 – boogie

+0

@ManzarshohDilovarよろしくお願いします。 – TLP

関連する問題