diff --git a/lib/PHP/Serialization.pm b/lib/PHP/Serialization.pm index 59a57c6..9dc3120 100644 --- a/lib/PHP/Serialization.pm +++ b/lib/PHP/Serialization.pm @@ -449,8 +449,7 @@ sub _encode { } elsif ( $type eq 'obj' ) { my $class = ref($val); - $class =~ /(\w+)$/; - my $subclass = $1; + my $subclass = (split "::", $class)[-1]; $buffer .= sprintf('O:%d:"%s":%d:', length($subclass), $subclass, scalar(keys %{$val})) . '{'; foreach ( %{$val} ) { $buffer .= $self->encode($_); diff --git a/t/11namespaces.t b/t/11namespaces.t new file mode 100644 index 0000000..828d7aa --- /dev/null +++ b/t/11namespaces.t @@ -0,0 +1,11 @@ +#!/usr/bin/env perl + +use Test::More tests => 1; + +use PHP::Serialization qw(unserialize serialize); + +my $encoded = q|O:7:"Foo\\Bar":1:{s:5:"value";i:1;}|; + +my $data = unserialize($encoded); +is( ref $data, ref unserialize( serialize( $data )) ); +