2

给定以下变量:

$test = {
  '1' => 'A',
  '2' => 'B',
  '3' => 'C',
  '4' => 'G',
  '5' => 'K',
}

如何在不知道我有哪些键的情况下遍历所有作业?

我想用结果作为标签和键作为隐藏值填充一个选择框。

4

3 回答 3

5

只需在键上执行 foreach 循环:

#!/usr/bin/perl
use strict;
use warnings;

my $test = {
  '1' => 'A',
  '2' => 'B',
  '3' => 'C',
  '4' => 'G',
  '5' => 'K',
};

foreach my $key(keys %$test) {
    print "key=$key : value=$test->{$key}\n";
}

输出:

key=4 : value=G
key=1 : value=A
key=3 : value=C
key=2 : value=B
key=5 : value=K
于 2011-04-04T10:13:37.823 回答
4

您可以使用内置功能each

while (my ($key, $value) = each %$test) {
  print "key: $key, value: $value\n";
}
于 2011-04-04T23:18:34.060 回答
3

你可以找出你有什么钥匙keys

my @keys = keys %$test; # Note that you need to dereference the hash here

或者你可以一次完成整个事情:

print map { "<option value='$_'>$test->{$_}</option>"  } keys %$test;

但是您可能需要某种顺序:

print map { "<option value='$_'>$test->{$_}</option>"  } sort keys %$test;

……而且您几乎可以肯定将 HTML 生成移到单独的模板系统中会更好。

于 2011-04-04T10:13:55.273 回答