【问题标题】:Can't use an undefined value as a HASH reference - Perl Mojolicious不能使用未定义的值作为 HASH 引用 - Perl Mojolicious
【发布时间】:2017-02-13 10:51:34
【问题描述】:

所以我在 perl 方面有点菜鸟,但本质上这段代码是我模型的一部分(插入到 sql 数据库中)。

我在运行此代码时遇到的错误是“不能使用未定义的值作为 HASH 引用”。

我认为明确的解决方案是定义一个包含名为 host_id 的键的哈希。

我将如何处理或修复我的代码。

    ####delete subfunctions
    ######
    sub deletehostservices
    {
      my ($self, $host_service_id) = @_;

      my $host_id = $self->pg->db->query('DELETE from hosts_services where hosts_services_id = ? returning host_id', $host_service_id)->hash->{host_id};
      return $host_id;
    }

【问题讨论】:

  • query 方法是否返回具有hash 方法的内容?您需要查阅您的文档。也可能是您的 SQL 不正确。您是否看到来自数据库的任何错误消息?
  • 查询方法在其他情况下工作正常,我相信是声明 host_id 分配作为哈希的一部分导致了这里的错误。
  • 使用Data::Printer先dump出查询方法的返回值。如果这没有帮助,请查看 hash 方法的返回值。你得到的错误是指你的箭头链的最后一部分。方法 hash 返回 undef,你尝试像 hash ref 一样访问它。
  • 您确定语法正确吗? (哈希键应该用大括号括起来;例如$hash->{key}->{another_key}->{and_another_key}
  • 原因很明显hash 正在返回undef,但是如果没有更多信息,很难说为什么会发生这种情况。 $self 是什么类?它是来自 CPAN 模块还是您自己编写的?在继续使用其结果之前,您需要检查数据库操作是否成功。

标签: perl mojolicious hashref


【解决方案1】:

当 Mojo::Pg 的 ->hash 方法返回 undef 时,是因为没有返回任何行。

您可以将结果存储在具有默认值的临时变量中

my $res = $self->pg->db->query(
  'DELETE from hosts_services where hosts_services_id = ? returning host_id', $host_service_id
)->hash || {};
return $res->{host_id};

或其他几种模式中的任何一种来处理获取 undef。不过,在这种情况下,我喜欢上面的那个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多