我需要将散列引用数组传递给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] => },
)
如何解决这个问题?
答案 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可选。)