/[cvs]/nfo/perl/libs/Data/Mungle/Transform/Deep.pm
ViewVC logotype

Diff of /nfo/perl/libs/Data/Mungle/Transform/Deep.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.10 by joko, Thu Feb 20 20:48:00 2003 UTC revision 1.12 by joko, Thu Feb 20 22:45:19 2003 UTC
# Line 2  Line 2 
2  ##  $Id$  ##  $Id$
3  ## ---------------------------------------------------------------------------  ## ---------------------------------------------------------------------------
4  ##  $Log$  ##  $Log$
5    ##  Revision 1.12  2003/02/20 22:45:19  joko
6    ##  fix regarding new deep_copy
7    ##
8    ##  Revision 1.11  2003/02/20 21:13:54  joko
9    ##  - removed implementation of deep_copy2 - get this from the Pitonyak namespace (now cloned to repository)
10    ##
11  ##  Revision 1.10  2003/02/20 20:48:00  joko  ##  Revision 1.10  2003/02/20 20:48:00  joko
12  ##  - refactored lots of code to Data::Code::Ref  ##  - refactored lots of code to Data::Code::Ref
13  ##  + alternative 'deep_copy' implementation  ##  + alternative 'deep_copy' implementation
# Line 58  use attributes; Line 64  use attributes;
64  use Data::Dumper;  use Data::Dumper;
65  use Iterate;  use Iterate;
66    
67    use Pitonyak::DeepCopy;
68  use Data::Transform::Encode qw( latin_to_utf8 latin_to_utf8_scalar utf8_to_latin utf8_to_latin_scalar );  use Data::Transform::Encode qw( latin_to_utf8 latin_to_utf8_scalar utf8_to_latin utf8_to_latin_scalar );
69  use Data::Code::Ref qw( ref_slot );  use Data::Code::Ref qw( ref_slot );
70    
# Line 441  sub deep_copy1 { Line 448  sub deep_copy1 {
448  # ACK's go to Andrew Pitonyak  # ACK's go to Andrew Pitonyak
449  # Copyright 2002, Andrew Pitonyak (perlboy@pitonyak.org)  # Copyright 2002, Andrew Pitonyak (perlboy@pitonyak.org)
450  # please visit: http://www.pitonyak.org/code/perl/Pitonyak/DeepCopy.pm.html  # please visit: http://www.pitonyak.org/code/perl/Pitonyak/DeepCopy.pm.html
 sub deep_copy2 {  
   
     # if not defined then return it  
     return undef if $#_ < 0 || !defined( $_[0] );  
   
     # if not a reference then return the parameter  
     return $_[0] if !ref( $_[0] );  
     my $obj = shift;  
     if ( UNIVERSAL::isa( $obj, 'SCALAR' ) ) {  
         my $temp = deep_copy2($$obj);  
         return \$temp;  
     }  
     elsif ( UNIVERSAL::isa( $obj, 'HASH' ) ) {  
         my $temp_hash = {};  
         foreach my $key ( keys %$obj ) {  
             if ( !defined( $obj->{$key} ) || !ref( $obj->{$key} ) ) {  
                 $temp_hash->{$key} = $obj->{$key};  
             }  
             else {  
                 $temp_hash->{$key} = deep_copy2( $obj->{$key} );  
             }  
         }  
         return $temp_hash;  
     }  
     elsif ( UNIVERSAL::isa( $obj, 'ARRAY' ) ) {  
         my $temp_array = [];  
         foreach my $array_val (@$obj) {  
             if ( !defined($array_val) || !ref($array_val) ) {  
                 push ( @$temp_array, $array_val );  
             }  
             else {  
                 push ( @$temp_array, deep_copy2($array_val) );  
             }  
         }  
         return $temp_array;  
     }  
   
     # ?? I am uncertain about this one  
     elsif ( UNIVERSAL::isa( $obj, 'REF' ) ) {  
         my $temp = deep_copy2($$obj);  
         return \$temp;  
     }  
   
     # I guess that it is either CODE, GLOB or LVALUE  
     else {  
         return $obj;  
     }  
 }  
   
451  sub deep_copy {  sub deep_copy {
452    deep_copy2(@_);    Pitonyak::DeepCopy::deep_copy(@_);
453  }  }
454    
455    
456  1;  1;
457  __END__  __END__

Legend:
Removed from v.1.10  
changed lines
  Added in v.1.12

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed