2017-02-13 39 views
0

所以我在perl有一點小菜,但實質上這個代碼是我的模型的一部分(插入到sql數據庫中)。不能使用一個未定義的值作爲HASH參考 - Perl Mojolicious

運行此代碼時出現的錯誤是'不能使用未定義的值作爲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; 
    } 
+0

'query'方法是否返回具有'hash'方法的東西?你需要諮詢你的文檔。也可能是因爲你的SQL不正確。你看到數據庫中的任何錯誤消息嗎? – simbabque

+0

查詢方法在其他實例中工作正常,我相信這是聲明host_id分配作爲一個哈希的一部分,這是造成這裏的錯誤。 – dipl0

+0

使用Data :: Printer首先轉儲查詢方法的返回值。如果這沒有幫助,請查看哈希方法的返回值。你得到的錯誤指的是你的箭鏈的最後一部分。該方法散列返回undef,並嘗試訪問像散列引用。 – simbabque

回答

0

當魔:: 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}; 

或任何其他幾種模式來處理越來越民主基金存儲。以上是我喜歡的這種情況。