2013-06-20 61 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