hash结构的输出问题?

hash结构的输出问题?

my %hash = (
            '10' => 'one',
            '2A' => 'two',
            '30' => 'three',
            );
(@key,@value) = each %hash;

@str=("  ","a a","FIS 0x10 s","FIS 0x2A=2","cc");
for($i=0;$i<@str;$i++)
   {if($str[$i]=~/^\s+/)
       { print "unuse"."\n"; }
    if($str[$i]=~/(FIS.*0x)((\d|\w)(\d|\w))/)
       { print $2."\n";
         if ($2=~/ foreach $key (keys %hash)/)
              { print $value (values %hash);}
        }
    else {$str[$i]="$str[$i] \n";  }
#  print $str[$i]."\n";
  }
想要通过匹配hash里面的key 10&2A来得到one&two,怎样可以实现?

现在可以输出:
unuse
10
2A
想要输出如下内容,该怎样实现呢?
one
two
Using regxp + exists()

QUOTE:
%hash = (  '10' => 'one',    '2A' => 'two',      '30' => 'three'  );
@str=("  ","a a","FIS 0x10 s","FIS 0x2A=2","cc");
for (@str) {
    if (/0x([\dA-Z]+)/ && exists $hash{$1}) {
        print "$1 = $hash{$1}\n";
    }
}

my %hash = (
         '10' => 'one',
         '2A' => 'two',
        '30' => 'three',
        );
@str=("  ","a a","FIS 0x10 s","FIS 0x2A=2","cc");
map { /FIS 0x([0-9A-F]+)/ &&  exists $hash{$1} && print $hash{$1}, "\n" } @str;
谢谢楼上两位!

上次好像见了用了MAP,哈哈