Perl 错误 : not a reference

标签 perl ubuntu reference storable

我最近将一些 Perl 代码从 SunSolaris 迁移到 64 位的 Linux(Ubuntu) 机器上。迁移 Storable.pm 后出现以下错误:

Byte order is not compatible at /usr/lib/perl/5.18/Storable.pm, at /home/VD/Cache.pm line 347.

在互联网上进行一些研究后,我发现我需要使用 nfreeze 而不是 thaw,但现在我收到以下错误:

not a reference at /home/VD/Cache.pm line 347.

关于如何解决这个问题有什么建议吗?

    sub get
    {
      my($self, $type, $param_ref) = @_;
       #return 1 if(!$self->{'INI'}{'sf.system.cache.enabled'});

if($self->{'INI'}{'sf.system.cache.database.enabled'})
{
    ### DATABASE
    my $param = $self->SF::Cache::convert_parameter($type, $param_ref);

    if($self->SF::Cache::CACHE_TABLE_USERCONTENT && $$param{'type'} == 2)
    {
        ### user-content
        my $query = 'SELECT PARAM_CONTENT AS C, DATA AS D FROM    sf_cache_usercontent WHERE SITE=? AND PARAM_USER=?';
        my $bindvar = { 1=>$self->{'site'}, 2=>$$param{'user'} };
        my $sth = $self->db_select($query, $bindvar);
        #print SF::Util::debug_dumpquery($query, $bindvar);
        return undef if($self->{'Error'});

        my %usercontent;
        undef(%usercontent);
        while(my $hashref = $self->db_fetch($sth))
        {
            $usercontent{$$hashref{'C'}} = $$hashref{'D'};# ? 1 : 0;
        }

        return \%usercontent;
    }
    else
    ### ******************************************************************************************************
    {
        my $ret = $self->SF::Cache::get_database('DATA', $param);

        return Storable::nfreeze($ret) if(defined $ret);
    }
}
else
{
    ### FILESYSTEM
    my $filename = $self->SF::Cache::filename($type, $param_ref);
    if($filename && -e $filename)
    {
        if($self->{'INI'}{'sf.system.cache.lock.enabled'} && defined  &lock_retrieve)
        {
            return lock_retrieve $filename;
        }
        else
        {
            return retrieve $filename;
        }
    }
    else
    {
        $! = 0;
    }
}
return undef;
}

最佳答案

返回到您的原始系统,解冻 然后nfreeze 那里的文件以修复它。

perl -MStorable=nstore,retrieve -e'nstore(retrieve($ARGV[0]), $ARGV[1])' file fixed

关于Perl 错误 : not a reference,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800259/

相关文章:

perl - 在 Moose 中,如何对 arrayref setter 进行 uniq?

perl - Emacs中未移位的符号

java - 如何安装适用于 Java 的 Azure 存储 SDK

C++做引用占用内存

methods - 如何在方法中将结构的数据分配给自身?

web-services - Perl/SOAP 精简版 : "Server was unable to process request. Object reference not set to an instance of an object"

perl - 在 Perl 中,使用 @a[$i] 访问数组元素与使用 $a[$i] 有什么区别?

r - 谁能帮我解决这个 crontab?

Eclipse - 关闭而不保存工作区

c++ - 通过引用传递指针