/[webpac]/trunk/filter/mem_lookup.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/filter/mem_lookup.pm

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

revision 350 by dpavlin, Sat Jan 31 21:03:06 2004 UTC revision 351 by dpavlin, Tue Jun 15 22:14:41 2004 UTC
# Line 33  sub mem_lookup { Line 33  sub mem_lookup {
33                                  push @{$main::cache->{mem_lookup}->{$k}}, $v;                                  push @{$main::cache->{mem_lookup}->{$k}}, $v;
34  #print STDERR "## mem_lookup store: $k => $v [",join("|",@{$main::cache->{mem_lookup}->{$k}}),"]\n";  #print STDERR "## mem_lookup store: $k => $v [",join("|",@{$main::cache->{mem_lookup}->{$k}}),"]\n";
35                          }                          }
36                  } elsif (/^(.*)\[([^\[]*)\[([^\[\]]+)\]([^\]]*)\](.*)$/) {                  } elsif (/\[[^\[\]]+\]/) {
37                          # indirect lookup [prefix[key]suffix]                          # lookup [key] recursivly
38                          my ($pre,$prek,$k,$postk,$post) = ($1,$2,$3,$4,$5);                          my @in = ( $_ );
39                          if ($main::cache->{mem_lookup}->{$k}) {  #print STDERR "mem_lookup: $_\n";
40                                  my @keys = @{$main::cache->{mem_lookup}->{$k}};                          while (my $f = shift @in) {
41  #print STDERR "## mem_lookup fetch keys $pre|$prek|$k|$postk|$post == [".join("|",@keys)."]\n";                                  if ($f =~ /\[([^\[\]]+)\]/) {
42                                  foreach my $k2 (@keys) {                                          my $k = $1;
43                                          my $full_k = $prek.$k2.$postk;                                          if ($main::cache->{mem_lookup}->{$k}) {
44                                          if ($main::cache->{mem_lookup}->{$full_k}) {  #print STDERR "mem_lookup key: $k = ";
45                                                  foreach my $v (@{$main::cache->{mem_lookup}->{$full_k}}) {                                                  foreach my $nv (@{$main::cache->{mem_lookup}->{$k}}) {
46                                                          my ($pret,$postt) = ($pre,$post);  #print STDERR "\t$nv\n";
47                                                          $pret=~s/\[$k\]/$k2/g;                                                          my $tmp = $f;
48                                                          $postt=~s/\[$k\]/$k2/g;                                                          $tmp =~ s/\[$k\]/$nv/g;
49                                                          push @out,$pret.$v.$postt;                                                          push @in, $tmp;
50                                                  }                                                  }
51                                            } else {
52                                                    undef $f;
53                                          }                                          }
54                                  }                                  } elsif ($f) {
55  #print STDERR "## mem_lookup return values $pre\[$prek\[$k\]$postk\]$post == [".join("|",@out)."]\n";                                          push @out, $f;
56                                    }      
57                          }                          }
                 } elsif (/^(.*)\[([^\[\]]+)\](.*)$/) {  
                         # direct lookup [key]  
                         my ($pre,$k,$post) = ($1,$2,$3);  
                         if ($main::cache->{mem_lookup}->{$k}) {  
 #print STDERR "## mem_lookup fetch $k == ".join("|",@{$main::cache->{mem_lookup}->{$k}})."\n";  
                                 foreach my $v (@{$main::cache->{mem_lookup}->{$k2}}) {  
                                         push @out,$pre.$v.$post;  
                                 }  
                         }  
 #print STDERR "## mem_lookup return values $k == ".join("|",@out)."\n";  
   
58                  } else {                  } else {
59                          # value is undef                          # value is undef
60                          #warn "mem_lookup: invalid filter specification: '$_'";                          #warn "mem_lookup: invalid filter specification: '$_'";

Legend:
Removed from v.350  
changed lines
  Added in v.351

  ViewVC Help
Powered by ViewVC 1.1.26