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;

始终打开这些 pragma 的一般规则。他们警告和错误可能会导致您找到问题的答案。

于 2012-11-30T21:14:56.567 回答
3

您应该使用 { 和 } 等大括号访问哈希。

$hash_name{$key} = $value;

在你的例子中。

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

你应该考虑做一些教程。这是 Perl 中非常基础的知识。

于 2012-11-30T21:17:24.577 回答