加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl错误:不是参考

发布时间:2020-12-15 23:33:07 所属栏目:大数据 来源:网络整理
导读:我最近将一些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. 在互联网上进行一些研究后,我发现我需要使用nfree
我最近将一些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而不是解冻,但现在我收到以下错误:

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;
}

解决方法

回到你的原始系统,解冻然后冻结那里的文件来修复它.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读