これはスクリプト全体であり、私には不思議な理由で「642」が出力されます。
#!usr/bin/perl
%vvv = (1,2,3,4,5,6);
$#vvv--;
%vvv = reverse %vvv;
print keys %vvv, "\n";
また、最後のステートメントの「キー」は何をしますか?御時間ありがとうございます。急いでいるので、研究をする時間がありません。繰り返しになりますが、ご入力いただきありがとうございます。
常にスクリプトを実行する必要があります
use strict;
use warnings;
もしそうなら、あなたはエラーに気づいたでしょう:
Global symbol "@vvv" requires explicit package name at ...
これは、ハッシュではなく、$#vvv
配列の最大インデックスを参照することを意味します。@vvv
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,6
なり6,5,4,3,2,1
ます。
$#vvv--コメントのように見えます。何が起こっているのかというと、偶数の要素配列であるハッシュが逆になっているだけです。だからそれはから行きます:
%vvv = (
1 => 2,
3 => 4,
5 => 6
);
に:
%vvv = (
6 => 5,
4 => 3,
2 => 1
);
したがって、キーが印刷されると、642、つまりハッシュの新しい現在のキーが取得されます。