gpt4 book ai didi

perl - Perl 哈希中元素的奇数个

转载 作者:行者123 更新时间:2023-12-01 13:47:36 26 4
gpt4 key购买 nike

我在处理哈希时遇到了一些问题。我需要将带有 key => value 对的版本列表放入散列中,但一直出现错误。下面的代码是我最近的尝试。一些字符串已更改,不需要的代码不包括在内。

我在网上找遍了,但没能找到任何可以帮助我的东西。我已经使用 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'
],
# ...
}

我最初试图让我的 has 如下所示。其中 $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'
}
# ...
}

最佳答案

这是因为您正在使用 [ ,它是匿名数组构造函数。尝试改用 {

如果你这样做的话,它可能会更加地道:

 $data{ $ver } = { 
version => $jver,
available => $table_tree->cell($jt,1)->as_text,
};

哦,缩进你的代码。 for 循环并没有在您(可能!)认为它完成的地方结束。特别是 - 检查 return 发生的位置。 (以及 $jt 的设置 - 它似乎与 $i 无关)

关于perl - Perl 哈希中元素的奇数个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34717830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com