全局符号“%CustomerCompanyName”需要明确的包名

Global symbol "%CustomerCompanyName" requires explicit package name

我不是 Perl 专家,但我正在尝试编辑 OTRS 软件以添加对 CustomerCompanyName 列的支持,如下所示,但出现错误

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

我谷歌了一下,发现是 "my" 和变量声明的问题,但过了一段时间,我还没有发现我做错了什么。

通过在这一行添加来应用更改: 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;
        }

您看到的问题是由以下行引起的:

$CustomerCompanyName = $CustomerCompanyName{'CustomerCompanyName'};

看起来你打算写:

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

(注意解除引用的箭头)。

$CustomerCompanyName{'CustomerCompanyName'} 是散列 %CustomerCompanyName 中的键,它不同于 $CustomerCompanyName,您声明的标量然后给出一个值(大概是散列引用)。