2015-06-12 8 views
5

मैंने हाल ही में सनसोलारिस से कुछ पर्ल कोड को 64 बिट के लिनक्स (उबंटू) बॉक्स में माइग्रेट किया है। माइग्रेशन के बाद Storable.pm निम्न त्रुटि के साथ टूट रहा है:पर्ल त्रुटि: संदर्भ

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

इंटरनेट मैंने पाया कि मैं thaw के बजाय 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; 
} 
+0

कौन सा लाइन घर/वीडी/Cache.pm 347 है? – Jens

+0

वापसी Storable :: nfreeze ($ ret) अगर (परिभाषित $ ret); – Darko1991

उत्तर

0

तो, "संदर्भ नहीं" का अर्थ है ... टिन पर यह वास्तव में क्या कहता है। आप टिप्पणी से Data::Dumper साथ thingy मुद्रण यह इस लाइन है की कोशिश कर सकते हैं:

return Storable::nfreeze($ret) if(defined $ret) 

तो - क्या करता है:

print Dumper $ret; 

उपज? क्या यह एक संदर्भ है?

मुझे यकीन नहीं है कि आप की आवश्यकता के बारे में thaw की आवश्यकता के बारे में सही हैं, क्योंकि वे दोनों अलग-अलग चीजें करते हैं। freeze एक चर पैक करता है; thaw इसे अनपैक करता है। तो nfreezefreeze को प्रतिस्थापित कर सकता है।

लेकिन ऐसा करने का मुख्य उद्देश्य अपने पैक किए गए स्केलर को किसी अन्य प्रोग्राम पर दूसरे प्रोग्राम में स्थानांतरित करना है। क्या यह आप कर रहे हैं?

यदि हां, तो क्या मैं इसे JSON या XML के रूप में स्थानांतरित करने के बजाय सुझाव दे सकता हूं?

+0

आप एक thaw nfreeze के बारे में सही हैं, दोनों पूरी तरह से अलग हैं। मुझे मूल रूप में लाइन 347 छोड़ना होगा: वापसी Storable :: thaw ($ ret) अगर (परिभाषित $ ret); लेकिन यह मुझे मेरी संगतता समस्या के साथ छोड़ देता है। बाइट ऑर्डर को ठीक करने के लिए कोई भी सुझाव /usr/lib/perl/5.18/Storable.pm पर /home/VD/Cache.pm लाइन 347 पर संगत नहीं है। ??? – Darko1991

1

वापस अपने मूल प्रणाली पर जाएँ, thaw तो nfreeze वहाँ फ़ाइल इसे ठीक करने के लिए।

perl -MStorable=nstore,retrieve -e'nstore(retrieve($ARGV[0]), $ARGV[1])' file fixed 
संबंधित मुद्दे