【问题标题】:Global symbol requires explicit package name perl全局符号需要显式包名 perl
【发布时间】:2016-12-28 17:21:27
【问题描述】:

这段代码给了我一个全局符号需要显式包名错误。它在第二次定义 $user 时抛出它。代码下方是错误。我不明白 $user 没有的原因。我正在尝试添加到返回的哈希值。

my $self     = shift;
my %json     = ('err' => 0, 'msg' => '');
my $user     = Order2016::get_orders($self->usernum); # Returns Hash

# Query to grab session history data
my $sql     = "select rate.duration, rate.price, rate.description, rate.active, order.user_id, order.quantity, order.add_date, order.modify_date, order.end_date, order.last_bill, order.next_bill, item.*
            from rate, order, item
            where order.user_id = ?
            and order.rate_id = rate.id
            and rate.item_id = item.id";
my $query   = new SQL($sql, $self->usernum);
my $hist    = $query->GetRecordsAsHashRef();

$user{'uid'} = $self->usernum;

$self->Print(to_json($user));

全局符号“%user”在 /devroot/depot/wxtap/deploy/scripts//Account.pm 第 1340 行需要明确的包名称。 /usr/lib/perl5/Apache2/porting.pm 第 90 行的 require 编译失败。

【问题讨论】:

    标签: perl


    【解决方案1】:

    我怀疑$user 是一个哈希reference,而不是一个哈希。要使用它,您需要先取消引用它(使用-> 运算符):

    $user->{uid} = $self->usernum;
    

    这也可以写成:

    $$user{uid} = ...;
    

    ...但这不太常见,而且使用前一种方法更为惯用。

    【讨论】:

    • 就是这样。我很感激。我来自 PHP 背景。
    【解决方案2】:

    请尝试 $user->{'uid'}。 $user 在这里被用作参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      相关资源
      最近更新 更多