2012-03-22 49 views
1

不熟悉Python,我想知道是否有人可以提供以下python代碼的原始perl equiv?Perl等於這個Python代碼

謝謝。

data = [("somestring.data", (178346464,1234568))] 
serialized_data = cPickle.dumps(data, protocol=-1) 
length_prefix = struct.pack("!L", len(serialized_data)) 
message = length_prefix + serialized_data 

回答

4

未經測試。

use Python::Serialise::Pickle qw(); 

# Work around P::S::Pickle 0.01's extremely limiting interface. 
sub pickle_dumps { 
    open(my $fh, '>', \my $s) or die $!; 
    my $pickle = bless({ _fh => $fh }, 'Python::Serialise::Pickle'); 
    $pickle->dump($_[0]); 
    $pickle->close(); 
    return $s; 
} 

my $data = [ "somestring.data", [ 178346464, 1234568 ] ]; 
my $message = pack("N/a*", pickle_dumps($data)); 
+0

+1愛的解決方法,以P ::與s ::泡菜的唯一文件限制 – John 2012-04-20 18:58:09

+0

@約翰,嗯,這是很脆弱的,因爲我重寫構造,但爲了使用普的必要:: S :: Pickle(當然,實際上寫入磁盤的時間很短)。 – ikegami 2012-04-20 19:35:25

2

自從我認真研究perl以來已經很長時間了(十多年了)。

所以,我會代替描述:

  • 數據是一個字符串的任意小的數據結構和整數數組中數組
  • 數據是用二進制語言特定的包裝方案連載( pickle)可以打包任意數據和代碼
  • 序列化數據的長度被計算並轉換成二進制格式big-endian 4字節。
  • 長度的二進制表示和所述串行化數據被級聯

看起來像一條線協議的基礎。接收代碼將讀取4個字節,解包淨荷長度,讀取淨荷長度字節。解包淨荷。