【发布时间】:2016-04-15 13:02:21
【问题描述】:
我在使用哈希时遇到了一些问题。我需要将带有键 => 值对的版本列表放入哈希中,但一直出错。下面的代码是我最近的尝试。某些字符串已更改,并且不包含不需要的代码。
我浏览了整个网络,但找不到任何可以帮助我的东西。我已经使用 Perl 很长时间了,但没有太多使用哈希和数组。我的大部分 Perl 经验都与正则表达式和 shell 执行有关。如果我使用的是 PHP,我只会使用多维数组,但这是 Perl,我正在编写的脚本比显示的要多得多,否则我会切换到 PHP。
我感谢花时间提供帮助的人。谢谢!
sub sub1 {
# Read file which populates @rows with each line.
my %data;
for (my $i=2; $i <= scalar @rows - 1; $i++) {
$ver =~ s/\s//m;
$data{ $ver } = [
'version', $ver,
'available', $table_tree->cell($jt,1)->as_text,
'bsupport', $table_tree->cell($jt,2)->as_text,
'ssupport', $table_tree->cell($jt,3)->as_text,
'eol', $table_tree->cell($jt,3)->as_text,
'utype', $table_tree->cell($jt,5)->as_text,
'lreleases', $table_tree->cell($jt,7)->as_text
];
};
return %data;
}
sub check_ {
# line 199 follows
my (%hash) = @_;
print Dumper (\%hash)."\n";
}
my %data = sub1($file);
check_(%data);
警告:
Odd number of elements in hash assignment at ./file.pl line 199 (#1)
(W misc) You specified an odd number of elements to initialize a hash,
which is odd, because hashes come in key/value pairs.
转储时的 %hash 为:
$VAR1 = {
'string1' => [
'version',
'string1',
'available',
'stringa',
'bsupport',
'stringb',
'ssupport',
'stringc',
'eol',
'stringd',
'utype',
'stringe',
'lreleases',
'stringf'
],
'string2' => [
'version',
'string2',
'available',
'stringa',
'bsupport',
'stringb',
'ssupport',
'stringc',
'eol',
'stringd',
'utype',
'stringe',
'lreleases',
'stringf'
],
'string3' => [
'version',
'string3',
'available',
'stringa',
'bsupport',
'stringb',
'ssupport',
'stringc',
'eol',
'stringd',
'utype',
'stringe',
'lreleases',
'stringf'
],
# ...
}
我最初试图让我的状态如下。其中 $VAR1 = { 'stringN' => { ... } 将是具有任意数量的键 => 值对的任意数字,但也会得到相同的错误。我让它工作了,但它总是会产生错误。
$VAR1 = {
'string1' => {
'version' => 'string1',
'available' => 'stringa',
'bsupport' => 'stringb',
'ssupport' => 'stringc',
'eol' => 'stringd',
'utype' => 'stringe',
'lreleases' => 'stringf'
},
'string2' => {
'version' => 'string2',
'available' => 'stringa',
'bsupport' => 'stringb',
'ssupport' => 'stringc',
'eol' => 'stringd',
'utype' => 'stringe',
'lreleases' => 'stringf'
},
'string3' => {
'version' => 'string3',
'available' => 'stringa',
'bsupport' => 'stringb',
'ssupport' => 'stringc',
'eol' => 'stringd',
'utype' => 'stringe',
'lreleases' => 'stringf'
}
# ...
}
【问题讨论】:
标签: perl multidimensional-array hash