如何用php共享perl数组的哈希引用

时间:2014-02-24 14:44:06

标签: php perl serialization

我需要将散列引用数组传递给php,以便php可以使用该数据。

我在做什么?

我使用PHP :: Serialize模块序列化perl数组的哈希引用并存储到数据库中。但在阅读时,我面临着一个问题。

#!/usr/local/bin/perl
use PHP::Serialization qw(serialize unserialize);
my @rss_feed_result = ({
                            'data'=> 'here',
                            'id'=> 1,
                            },
                        );

my $rss_feed_result = serialize(\@rss_feed_result);
//storing it to database then

现在我在php中读取相同的数据,通过反序列化并在unserialize之后得到低于输出,这是不正确的。

<?php
.....read data from database into $perl_serialize_data
$perl_serialize_data = "HERE PERL SERIALIZE DATA";
print_r(unserialize($perl_serialize_data));
?>

以下是输出。

(
    [0] => {
    [1] => 'data'=>
    [2] => 'here',
    [3] => 'id'=>
    [4] => 1,
    [5] => },
)

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果您使用的是use warnings,则会收到此警告:

Possible attempt to separate words with commas at foo.pl line 1.

使用qw(),您试图将该数据结构引用为单个单词。结果在Perl中看起来像这样:

("{", "'data'=>", "'here',", "'id'=>", "1,", "},")

但你不想要一份清单。你想要数据结构。相反,您可能希望这样做:

use strict;
use warnings;
use PHP::Serialization qw(serialize unserialize);
my $rss_feed_result = {
  'data' => 'here',
  'id'   => 1,
};

my $php = serialize($rss_feed_result);

如果你有这些哈希引用的列表,你仍然可以使用你的数组。

my @rss_feed_results = (
  {
    'data' => 'here',
    'id'   => 1,
  },
  {
    'data' => 'there',
    'id'   => 2,
  },
  {
    'data' => 'over yonder',
    'id'   => 3,
  },
);
my $php = serialize(\@rss_feed_results);

答案 1 :(得分:0)

您的RSS Feed解析器会返回哈希值,但您使用

my @rss_feed_result = qw(
   {
      'data'=> 'here',
      'id'=> 1,
   },
);

相同
my @rss_feed_result = (split ' ', q(
   {
      'data'=> 'here',
      'id'=> 1,
   },
));

如果你实际上有一个哈希的引用,它可能会正常工作。

my @rss_feed_result = (
   {
      'data'=> 'here',
      'id'=> 1,
   }
);

(Parens可选。)