关于array & hash的问题,继续求助,进展到奇怪的结果请帮助,问题解决!多谢!

关于array & hash的问题,继续求助,进展到奇怪的结果请帮助,问题解决!多谢!

在三楼重新描述了问题,请各位见谅,多谢!
问题进展到13楼,请各位高手帮助!


今天碰到一个问题,想不通,上来求助,

使用hash keys为索引,调用另一个hash,直接调用如下:
for (keys %hash){
   print "$hash2{$_}\n";
}

结果打印错误,说“查无此值”,但是如果直接把hash keys直接写到array里:
@temp = (12, 25, 1789);
for (@temp){
    print "$hash2{$_}\n";
}
可以得到正确的结果,这是怎么回事?

hash keys均为数字组成的字符串

my %hash  = ( 'a' => 'aa', 'b' => 'bb' );
my %hash2 = %hash;

for (keys %hash) {
    print $hash2{$_}, "\n";
}
不是这样啊,可能是我没说清楚:

sub print_chr{
    our $obj = shift;
    &sub1;
    &sub2;
    for (keys %data){
        print "$hash{$_}\n";      ### 无法打印,"uninitialized hash element",但keys肯定在hash里面

        print "$_\n";                           ### 显示正确的值

    }

     for (9969, 51802, 10402, 3773, 5586){
        print "$_\t=>\t$hash{$_}\tend\n";      ### 可以正常索引%hash,并打印

     }
}

这样是不是清楚一点

你能保证%data所有的key, 都存在于%hash中?
不能的话, 就+if


QUOTE:
原帖由 Lonki 于 2007-10-13 00:58 发表
你能保证%data所有的key, 都存在于%hash中?
不能的话, 就+if

我能保证啊,至少保证大部分在,但是一个都输出不了啊
一个都输出不了就不清楚了...

我测的是:
my %hash1 = ( 1 => 'a', 2 => 'b', 3 => 'c' );
my %hash2 = (           2 => 'b', 3 => 'c' );

for (sort keys %hash1) {
    print $hash2{$_}, "\n";
}


运行结果如下:
Use of uninitialized value in print at LearnPerl.pl line 9.

b
c
print "$hash{$_}\n" if exists $hash{$_};
我试了,现在问题变成:明明keys在%hash中,可是为什么用exists检测时为假呢?
我实验了下,没有什么问题

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/perl -w
use strict;

my %hash=("name",'Kate',"age",23);
my %hash2=("name",'Paul',"age",24,"birthday",'1982.9.10');

for(keys %hash){
    print "$hash2{$_}\n";
    print "$_\n";
}

use strict;
use warnings;