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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Fri Nov 29 04:49:20 2002 UTC (21 years, 7 months ago) by joko
Branch: MAIN
+ initial check-in

1 joko 1.1 ##############################################
2     #
3     # $Id: Common.pm,v 1.1 2002/10/10 03:26:00 cvsjoko Exp $
4     #
5     # $Log: Common.pm,v $
6     # Revision 1.1 2002/10/10 03:26:00 cvsjoko
7     # + new
8     #
9     ##############################################
10    
11    
12     package Data::Transform::Deep;
13    
14     use strict;
15     use warnings;
16    
17     require Exporter;
18     our @ISA = qw( Exporter );
19     our @EXPORT_OK = qw(
20     &var_NumericalHashToArray
21     &var_deref
22     &var_mixin
23     &getStructSlotByStringyAddress
24     );
25    
26     use attributes;
27    
28    
29     sub var_NumericalHashToArray {
30     my $vref = shift;
31     #my $context = shift;
32     if (ref $vref eq 'HASH') {
33     foreach (keys %{$vref}) {
34     # if ((ref $vref->{$_}) =~ m/HASH/) {
35     if ((ref $vref->{$_}) =~ m/HASH/) {
36     if ($vref->{$_}{0}) { # might be a numerical-indexed array
37     #print "000\n";
38     #print "context: $context\n";
39     my @arr;
40     foreach my $key_numeric (sort keys %{$vref->{$_}}) {
41     push @arr, $vref->{$_}{$key_numeric};
42     }
43     $vref->{$_} = \@arr;
44     }
45     var_NumericalHashToArray($vref->{$_});
46     }
47     # } else {
48     # #$vref->{$_} = scalar2iso($vref->{$_});
49     # }
50     }
51     }
52     }
53    
54    
55     sub var_deref {
56     my $obj = shift;
57     my $result;
58     if ((ref $obj) eq 'ARRAY') {
59     foreach (@{$obj}) {
60     my $ref = ref $_;
61     if ($ref) {
62     push(@{$result}, var_deref($_));
63     } else {
64     push(@{$result}, $_);
65     }
66     }
67     } else {
68     foreach (keys %{$obj}) {
69     my $key = $_;
70     my $ref = ref $obj->{$_};
71     if ($ref) {
72     $result->{$_} = var_deref($obj->{$_});
73     } else {
74     $result->{$_} = $obj->{$_};
75     }
76     }
77     }
78     return $result;
79     }
80    
81    
82    
83    
84     my @indexstack;
85     sub var_traverse_mixin_update {
86     my $obj = shift;
87     my $data = shift;
88     my $bool_recursion = shift;
89     if (!$bool_recursion) {
90     @indexstack = ();
91     }
92     my $result;
93    
94     # 'ARRAY' does not work!
95     if ((ref $obj) eq 'ARRAY') {
96     #print "ARRAY\n";
97     my $i = 0;
98     foreach (@{$obj}) {
99     push @indexstack, $i;
100     my $ref = ref $_;
101     if ($ref) {
102     #$obj->[$i] = var_mixin($_, $data, 1);
103     var_traverse_mixin_update($_, $data, 1);
104     } else {
105     $obj->[$i] = $_;
106     }
107     pop @indexstack;
108     $i++;
109     }
110     } else {
111     foreach (keys %{$obj}) {
112     push @indexstack, $_;
113     my $ref = ref $obj->{$_};
114     if ($ref) {
115     #$obj->{$_} = var_mixin($obj->{$_}, $data, 1);
116     var_traverse_mixin_update($obj->{$_}, $data, 1);
117     } else {
118     #$obj->{$_} = $obj->{$_};
119     my $evstring = getSlot($data);
120     $obj->{$_} = $evstring;
121    
122     }
123     pop @indexstack;
124     }
125     }
126     #return $result;
127     }
128    
129     sub getStructSlotByStringyAddress {
130     my $var = shift;
131     my $indexstack_ref = shift;
132     my @indexstack = @{$indexstack_ref};
133     my $joiner = '->';
134     my @evlist;
135     foreach (@indexstack) {
136     my $elem;
137     if ($_ =~ m/\d+/) { $elem = "[$_]"; }
138     if ($_ =~ m/\D+/) { $elem = "{$_}"; }
139     push @evlist, $elem;
140     }
141     my $evstring = join($joiner, @evlist);
142     $evstring = 'return $var->' . $evstring . ';';
143     #print "ev: $evstring\n";
144     return eval($evstring);
145     }
146    
147     1;

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