2013-06-20 49 views
0

运行的Perl脚本收到错误

Odd number of elements in hash assignment at GenerateInterchangeFromIntegrationManifest.pl line 197. 
{ 
    "Change list" : "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); 

任何一个可以帮助我解决这个问题?

+0

也许您需要这个? 'IUItemName => \&convertIuItemName' – perreal

+0

这工作正常。错误是在另一个地方,你没有粘贴在这里。请添加错误周围的行。 – Himanshu

+0

但'IUItemName => convertIuItemName,'部分不应该这样做。它是一个未引用的值 – 2013-06-20 06:31:11

回答

5

有几个子例程调用分配给散列,它可能会返回具有偶数个元素的列表(这会使列表总数奇数,并且还会更改哪些数据是关键字,以及哪些数据是来自列表上,这可能对你更糟糕)。正如Dallaylaen在评论中指出的那样,这可能只是一条返回“无”的行,return;将在列表上下文中评估为空列表(),即偶数长度为0。问题代码中的所有子程序调用都将在列表上下文中进行评估。

我会建议一个简单的调试技术:

  • 注释掉所有的函数调用,应删除警告线。
  • 然后一次添加几个并重新测试。
  • 当警告再次出现时,您会将问题隔离到几个子例程之一。
  • 重复,直到你知道哪一个。
  • 然后调查该调用以了解如何修复它。
+0

您也可以将所有方法返回转换为引用。相反,您应该将数组作为关键值传递是没有意义的。 – arunxls