3

これはスクリプト全体であり、私には不思議な理由で「642」が出力されます。

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

また、最後のステートメントの「キー」は何をしますか?御時間ありがとうございます。急いでいるので、研究をする時間がありません。繰り返しになりますが、ご入力いただきありがとうございます。

4

2 に答える 2

20

常にスクリプトを実行する必要があります

use strict;
use warnings;

もしそうなら、あなたはエラーに気づいたでしょう:

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

これは、ハッシュではなく、$#vvv配列の最大インデックスを参照することを意味します。@vvvperlでは、@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ます。

于 2012-05-03T00:13:26.017 に答える
6

$#vvv--コメントのように見えます。何が起こっているのかというと、偶数の要素配列であるハッシュが逆になっているだけです。だからそれはから行きます:

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

に:

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

したがって、キーが印刷されると、642、つまりハッシュの新しい現在のキーが取得されます。

于 2012-05-03T00:02:57.960 に答える