Perl 得到一个;散列赋值中元素的奇数“;错误
我在运行Perl脚本时遇到以下错误Perl 得到一个;散列赋值中元素的奇数“;错误,perl,Perl,我在运行Perl脚本时遇到以下错误 GenerateInterchangeFromIntegrationManifest.pl第197行哈希赋值中的奇数元素。 { “更改列表”:“0” } 以下是脚本: my %labelFieldMap = (IUItemName => convertIuItemName, Changelist => sub {}, IUItemLevel => cr
GenerateInterchangeFromIntegrationManifest.pl第197行哈希赋值中的奇数元素。
{
“更改列表”:“0”
}
以下是脚本:
my %labelFieldMap = (IUItemName => convertIuItemName,
Changelist => sub {},
IUItemLevel => createNormalConvert('iuItemLevel'),
ContactPOC => \&convertContacts,
Cspec => \&convertCspec,
IsNew => createBooleanConvert('isNew'),
Submitter => createNormalConvert('submitter'),
LabelType => createNormalConvert('type'),
Revision => createNestedConvert('component', 'revision'),
RevisionName => sub {},
ComponentBaseName => createNestedConvert('component', 'baseName'),
Version => createNestedConvert('component', 'version'),
PLMapping => createNormalConvert('plMapping'),
BidMapping => createNormalConvert('bidMapping'),
ClientId => createNormalConvert('clientId'),
Path => \&convertPath,
ExtendedData => \&convertExtendedData);
有谁能帮我解决这个问题吗?在分配给哈希的过程中,有几个子程序调用可能会返回具有偶数个元素的列表(这会使列表的总体计数为奇数,并且还会更改哪些数据是键,哪些值是从列表中的该点开始的,这可能对您更糟)。正如Dallaylaen在评论中指出的,这可能只是一行返回“nothing”,
return代码>将计算为空列表()
,即列表上下文中的偶数长度为0。问题代码中的所有子例程调用将在列表上下文中进行计算
我建议使用一种简单的调试技术:
- 用一个函数调用注释掉所有的行,这将删除警告李>
- 然后一次添加几个并重新测试李>
- 当警告再次出现时,您将已将问题隔离到少数子例程之一李>
- 重复,直到你知道是哪一个
- 然后调查这个电话,看看你可以如何解决它
分配给散列的子例程调用可能会返回具有偶数个元素的列表(这将使列表整体计数为奇数,并且还会更改哪些数据是键以及列表中该点的哪些值,这可能对您更糟)。正如Dallaylaen在评论中指出的,这可能只是一行返回“nothing”,return代码>将计算为空列表()
,即列表上下文中的偶数长度为0。问题代码中的所有子例程调用将在列表上下文中进行计算
我建议使用一种简单的调试技术:
- 用一个函数调用注释掉所有的行,这将删除警告李>
- 然后一次添加几个并重新测试李>
- 当警告再次出现时,您将已将问题隔离到少数子例程之一李>
- 重复,直到你知道是哪一个
- 然后调查这个电话,看看你可以如何解决它
也许你需要这个IUItemName=>\&convertiuiitemname
这可以正常工作。错误在另一个您尚未粘贴到此处的位置。请在出错的部分周围添加行。但是IUItemName=>convertiuiitemname,
部分不应该这样做。它是一个不带引号的值在散列中有几个子程序调用,它们可能返回具有偶数个元素的列表(这将使列表总体计数为奇数)。我建议使用一种简单的调试技术——用一个函数调用注释掉所有的行,这样可以删除警告。然后一次添加几个并重新测试。当警告再次出现时,您将已将问题隔离到少数子例程之一。重复上述步骤,直到你知道是哪一个,然后调查这个电话,看看你可以如何解决它。@NeilSlater这应该是答案。我想补充一点,如果其中一个函数只是返回
s在某个点,当调用为my$foo=bar()时,它将返回unde
代码>但是我的%foo=(bar=>bar(),)
中的空列表(分别称为标量和列表上下文)。也许您需要这个IUItemName=>\&convertiuiitemname
这可以正常工作。错误在另一个您尚未粘贴到此处的位置。请在出错的部分周围添加行。但是IUItemName=>convertiuiitemname,
部分不应该这样做。它是一个不带引号的值在散列中有几个子程序调用,它们可能返回具有偶数个元素的列表(这将使列表总体计数为奇数)。我建议使用一种简单的调试技术——用一个函数调用注释掉所有的行,这样可以删除警告。然后一次添加几个并重新测试。当警告再次出现时,您将已将问题隔离到少数子例程之一。重复上述步骤,直到你知道是哪一个,然后调查这个电话,看看你可以如何解决它。@NeilSlater这应该是答案。我想补充一点,如果其中一个函数只是返回
s在某个点,当调用为my$foo=bar()时,它将返回unde
但是my%foo=(bar=>bar(),)
中的空列表(分别称为标量和列表上下文)。您还可以将所有方法返回转换为引用。相反,将数组作为键值传递是没有意义的。您还可以将所有方法返回转换为引用。相反,将数组作为键值传递是没有意义的。