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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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