1

私はperlの初心者です。ハッシュの値を返す関数を作成しようとしています。次のコードは、ハッシュの最後のインデックスを返すだけです。私はグーグルで検索しましたが、必要なものが見つかりませんでした。どこが間違っているのか誰か教えていただければ幸いです。

「he_1」を渡すと、1などの戻り値が返されるはずですが、9しか表示されません。

#!/usr/bin/perl

my %IndexMap = ();

my $MAX_V = 5;
my $MAX_T = 10;

sub InitIndexMap {
   foreach my $i (0..$MAX_V-1) {
      $IndexMap["he_".$i] = $i;
      print "he_".$i;
      print $IndexMap["he_".$i];
   }

    foreach my $i ($MAX_V..$MAX_T-1) {
      $IndexMap["un".$i] = $i;
      print "un".$i;
      print $IndexMap["un".$i];
    }
}

sub GetVal {
   my ($name) = @_;
   return $IndexMap[$name];
}

&InitIndexMap();
my ($index) = &Getval("he_4");
print $index;
4

2 に答える 2

7

ハッシュを読み取るには、括弧ではなく中括弧を使用します。これを試して:

sub InitIndexMap {
    foreach my $i (0..$MAX_V-1) {
        $IndexMap{ "he_" . $i } = $i;
        print "he_".$i;
        print $IndexMap{ "he_" . $i };
    }

    foreach my $i ($MAX_V..$MAX_T-1) {
        $IndexMap{ "un" . $i } = $i;
        print "un".$i;
        print $IndexMap{ "un" . $i };
    }
}

sub GetVal {
    my ( $name ) = @_;
    return $IndexMap{ $name };
}

これをスクリプトの先頭に追加する必要があります。

use strict;
use warnings;

これらのプラグマを常に有効にするという一般的なルール。その原因となる警告とエラーが、おそらくあなたの質問に対する答えにつながったでしょう。

于 2012-11-30T21:14:56.567 に答える
3

{ や } などの中かっこでハッシュにアクセスする必要があります。

$hash_name{$key} = $value;

あなたの例では。

$IndexMap{"he_".$i} = $i;

いくつかのチュートリアルを行うことを検討する必要があります。これは Perl の非常に基本的な知識です。

于 2012-11-30T21:17:24.577 に答える