2

この質問をする前に SO を検索しました。これはまったく初めてで、これらのエラーを処理する方法がわかりません。これは Perl 言語を意味します。

これを入れると

%name->{@id[$#id]} = $temp;

エラーが発生しますUsing a hash as a reference is deprecated

私は試した

$name{@id[$#id]} = $temp

しかし、結果を返すことができませんでした。

助言がありますか?

4

4 に答える 4

8

ハッシュの要素にアクセスする正しい方法%nameはです$name{'key'}。構文%name->{'key'}はPerlv5.6で有効でしたが、その後非推奨になりました。

同様に、配列の最後の要素にアクセスするには、次のように@id記述します。$id[$#id]より簡単に言うと、$id[-1]

2番目のバリエーションは正常に機能するはずであり、値を取得できないことには無関係の理由があります。

書く

$name{$id[-1]} = 'test';

print $name{$id[-1]};

test正しく表示されます

于 2012-06-15T04:02:10.823 に答える
4
%name->{...}

常にバグがありました。それはすべきことをしません。そのため、使用しようとすると警告が表示されるようになりました。ハッシュにインデックスを付ける適切な方法は次のとおりです。

$name{...}

あなたがすでに信じているように。


今、あなたは言う

$name{@id[$#id]}

動作しませんが、動作する場合は、コードの別の場所にエラーがあるためです。そのコードは間違いなく機能します

>perl -wE"@id = qw( a b c ); %name = ( a=>3, b=>4, c=>5 ); say $name{@id[$#id]};"
Scalar value @id[$#id] better written as $id[$#id] at -e line 1.
5

ただし、警告が示すように、配列にインデックスを付ける適切な方法はそうではありません

@id[...]

それは実際には

$id[...]

最後に、配列の最後の要素を取得する最も簡単な方法は、 index を使用すること-1です。あなたのコードがすべき手段

$name{ $id[-1] }
于 2012-06-15T04:26:40.403 に答える
-2

配列またはハッシュから 1 つの項目が必要な場合は、$. アイテムのリストには、それぞれ @ と % を使用します。@ を参照として使用すると、perl がハッシュとして解釈した可能性のあるアイテムではなく、リストが返されました。

このコードは、配列のハッシュの参照を示しています。

#!/usr/bin perl -w
my %these = ( 'first'=>101,
             'second'=>102,
           );
my @those = qw( first second );
print $these{$those[$#those]};

「102」を出力します

于 2012-06-15T04:16:59.360 に答える