@@ -395,10 +395,7 @@ if ($realpack) { # we have a blessed ref $out .= ', \'' . $realpack . '\'' . ' )'; - my $toaster = $s->{toaster}; - if (UNIVERSAL::can($val, $toaster)){ - $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne ''; - } + $out .= '->' . $s->{toaster} . '()' if $s->{toaster} ne ''; $s->{apad} = $blesspad; } $s->{level}--; #### WARNING(Freezer method call failed): Can't locate object method "DUMPER_freeze" via package "TestAutoDBOutside_1" at /tools/lib/perl5/5.8.4/i686-linux-thread-multi/Data/Dumper.pm line 158. ... Attempt to free temp codematurely: SV 0x83ee194 at /tools/lib/perl5/5.8.4/i686-linux-thread-multi/Data/Dumper.pm line 501. Scalars leaked: 1 #### package DD_test; use lib qw(../blib/lib ../blib/arch); use Data::Dumper; use Test::More qw/no_plan/; $Data::Dumper::Useperl = 1; my $DUMPER=new Data::Dumper([undef],['thaw'])->Purity(1)->Indent(1)->Freezer('DUMPER_freeze')->Toaster('DUMPER_thaw'); my $f = new freezable; my $t = new unthawable; $f->{_OTHER} = new unthawable; $t->{_OTHER} = new freezable; my ($thaw); print "-" x 100, "\n"; print "Freezable\n"; print "-" x 100, "\n"; my $th = $DUMPER->Values([$f])->Dump; #print Dumper $th; eval $th; #sets $thaw #print Dumper $thaw; isa_ok($thaw,'freezable'); is($thaw->oid, 1); isnt($thaw->can('DUMPER_thaw'),undef); is($thaw->{_OTHER}->oid, 3); is($thaw->{_OTHER}->can('DUMPER_thaw'),undef); undef $thaw; print "-" x 100, "\n"; print "Unfreezable\n"; print "-" x 100, "\n"; my $th2 = $DUMPER->Values([$t])->Dump; #sets $thaw #print Dumper $th2; eval $th2; #sets $thaw #print Dumper $thaw; is($thaw->oid, 3); is($thaw->can('DUMPER_thaw'),undef); is($thaw->{_OTHER}->oid, 1); isnt($thaw->{_OTHER}->can('DUMPER_thaw'),undef); ## freezable package package freezable; sub new { my($self)=@_; return bless {}, $self; } sub oid { return 1; } sub DUMPER_freeze { my($self)=@_; print ">>> DUMPER_freeze ",$self->oid,"\n"; $self->{_OID} = $self->oid; $self->{_CLASS} = ref $self; return $self; } sub DUMPER_thaw { my($self)=@_; print "<<< DUMPER_thaw ", $self->oid, "\n"; return $self; } sub oid2object { shift @_ unless ref($_[0])=~/DBI::/; %__PACKAGE__::OID_2_OBJECT=shift @_ if @_; return \%$__PACKAGE__::OID_2_OBJECT; } ## unthawable package (no DUMPER_freeze, DUMPER_thaw method) package unthawable; sub new { my($self)=@_; return bless {_OID=>$self->oid,_CLASS=>$self}, $self; } sub oid { return 3; }