2016-01-20 70 views
0

我不是一个Perl的专家,但我想编辑OTRS软件,增加了对CustomerCompanyName柱支撑如下,但我得到的错误全局符号“%CustomerCompanyName”需要明确的包名

Global symbol "%CustomerCompanyName" requires explicit package name at /opt/otrs//Kernel/Output/HTML/Dashboard/TicketGeneric.pm line 1516. 

我已经googoled了一下,发现这是“我的”和变量声明的问题,但过了一段时间,我还没有发现我做错了什么。

改变通过这条线将适用于: https://github.com/OTRS/otrs/blob/1e908159a5dbdcfb94cc35d13bf15b04ac3e6a24/Kernel/Output/HTML/Dashboard/TicketGeneric.pm#L1510

 elsif ($Column eq 'CustomerCompanyName') { 

      # get customer name 
      my $CustomerCompanyName; 
      if ($Ticket{CustomerID}) { 
       $CustomerCompanyName = $Kernel::OM->Get('Kernel::System::CustomerCompany')->CustomerCompanyGet(
        CustomerID => $Ticket{CustomerID}, 
       ); 
       $CustomerCompanyName = $CustomerCompanyName{'CustomerCompanyName'}; 
      } 
      $DataValue = $CustomerCompanyName; 
     } 
+0

“CustomerCompanyGet”返回什么类型的值? – toolic

+0

你期望'$ CustomerCompanyName {'CustomerCompanyName'}'包含什么?鉴于你刚刚用'my'初始化它,它怎么能包含任何东西呢? – tripleee

+1

$ CustomerCompanyName = $ CustomerCompanyName - > {'CustomerCompanyName'};假定CustomerCompanyGet返回散列引用 – Andrey

回答

3

你看到的是由线而引起的问题:

$CustomerCompanyName = $CustomerCompanyName{'CustomerCompanyName'}; 

,它看起来像你的意思是写:

$CustomerCompanyName = $CustomerCompanyName->{'CustomerCompanyName'}; 

(注意取消引用箭头)。

$CustomerCompanyName{'CustomerCompanyName'}是散列%CustomerCompanyName中的一个键,它与$CustomerCompanyName不同,它是您声明的标量,然后给出一个值(推测为散列ref)。