Perl PHP::Serialization在尝试序列化HTTP::Response时出错

Perl PHP::Serialization在尝试序列化HTTP::Response时出错,perl,serialization,Perl,Serialization,尝试序列化时出错 下面是一个例子。有什么提示吗 #!/usr/bin/perl -w use strict ; use warnings ; use LWP ; use PHP::Serialization qw(serialize unserialize); my $url = 'http://stackoverflow.com/' ; my $ua = LWP::UserAgent->new() ; my $page = $ua->get($url) ; pri

尝试序列化时出错

下面是一个例子。有什么提示吗

#!/usr/bin/perl -w

use strict ;
use warnings ;
use LWP ; 
use PHP::Serialization qw(serialize unserialize); 


my $url = 'http://stackoverflow.com/' ; 
my $ua  = LWP::UserAgent->new() ;
my $page = $ua->get($url) ; 

print "HTML page is ". length($page)." bytes long.\n" ; 
print $page ; print "\n" ; 

my $buffer ; 
eval { $buffer = serialize($page); } ; die $@ if $@ ;    


open FH, '>stored.dat' or die "Cannot create store file $!" ; 
binmode FH ; 
print FH $buffer ; 
close FH ; 
执行结果如下:

HTML page is 30 bytes long. HTTP::Response=HASH(0x901f110) Not a HASH reference at /usr/local/share/perl/5.10.1/PHP/Serialization.pm line 454. 感谢您提供的所有可能的解决方案

当你这样做的时候

my $page = $ua->get($url); 
您将得到一个
HTTP::Response
对象。您需要调用
$response->content
方法来获取响应的内容

my $response = $ua->get($url);
die "didn't get a page: ".$response->status_line."\n" unless $response->is_success;
my $page = $response->content;
错误消息抱怨PHP::Serialize不知道如何序列化不是普通perl哈希/数组引用(在本例中可能是代码引用)的内容

my $page = $ua->get($url); 
您将得到一个
HTTP::Response
对象。您需要调用
$response->content
方法来获取响应的内容

my $response = $ua->get($url);
die "didn't get a page: ".$response->status_line."\n" unless $response->is_success;
my $page = $response->content;

错误消息抱怨PHP::Serialize不知道如何序列化不是普通perl哈希/数组引用(在本例中可能是代码引用)的内容。

HTTP::Response和/或HTTP::Request对象(我不记得是哪个)有一个通常是。该对象是一个受祝福的标量引用

环顾报告错误的行,似乎
PHP::Serialization
认为所有对象都是基于哈希的。因此,当它遇到一个标量引用对象时,它会阻塞

注:

=head1待办事项

支持不同的对象类型

我不知道序列化格式是否能够建议修补程序,但修复程序如下所示:

elsif ( $type eq 'obj' ) {
    my $class = ref($val);
    $class =~ /(\w+)$/;
    my $subclass = $1;

    my $reftype = reftype $val;
    if ($reftype eq 'HASH') {
        # blessed hash serialization
    }
    elsif ($reftype eq 'ARRAY') {
        # blessed array serialization
    }
    elsif ($reftype eq 'SCALAR') {
        # blesssed scalar serialization
    }
    elsif ($reftype eq 'CODE') {
        # blessed coderef serialization
    }
    elsif ($reftype eq 'GLOB') {
        # blessed globref serialization
    }
    else {
        # etc etc
    }

其中
reftype
来自。事实上,如果只在遇到不受支持的类型时发出咯咯声,填充这些分支或将其转换为调度表将非常有用。

HTTP::Response
和/或
HTTP::Request
对象(我不记得是哪个)具有成员
\u uri
,通常是一个。该对象是一个受祝福的标量引用

环顾报告错误的行,似乎
PHP::Serialization
认为所有对象都是基于哈希的。因此,当它遇到一个标量引用对象时,它会阻塞

注:

=head1待办事项

支持不同的对象类型

我不知道序列化格式是否能够建议修补程序,但修复程序如下所示:

elsif ( $type eq 'obj' ) {
    my $class = ref($val);
    $class =~ /(\w+)$/;
    my $subclass = $1;

    my $reftype = reftype $val;
    if ($reftype eq 'HASH') {
        # blessed hash serialization
    }
    elsif ($reftype eq 'ARRAY') {
        # blessed array serialization
    }
    elsif ($reftype eq 'SCALAR') {
        # blesssed scalar serialization
    }
    elsif ($reftype eq 'CODE') {
        # blessed coderef serialization
    }
    elsif ($reftype eq 'GLOB') {
        # blessed globref serialization
    }
    else {
        # etc etc
    }

其中
reftype
来自。事实上,如果只在遇到不支持的类型时发出嘎嘎声,填写这些分支或将其转换为调度表将非常有用。

顺便说一句,文档上的注释与的首页类似。顺便说一句,文档上的注释与的首页类似。