From: Richard Lee <[EMAIL PROTECTED]>
> Jenda Krynicky wrote:
> > You may do something like this:
> >
> >   for my $wanted ( 
> >       [outsideroute_group_m => route_name => \$routename, 
> > route_group_id => \$routegroupid], 
> >       [outsideroute_trunk_m => route_group_id => \$routegroupid, 
> > trunkgroup_id => \$trunkgroupid], 
> >       [outsideotrunkgroup_m => trunkgroup_id => \$trunkgroupid, 
> > carrier_id => \$carrierid], 
> >       [outsidecarrier_m => carrier_id => \$carrierid, carrier_name => 
> > \$carriername], 
> >       [outsidecarrier_m => carrier_id => \$carrierid, active => 
> > \$carrier_active], 
> >   ) {
> >       if (exists $_->{$wanted->[0]}{$wanted->[1]} 
> >         and $_->{$wanted->[0]}{$wanted->[1]} eq ${$wanted->[2]}) {
> >           ${$wanted->[4]} = $_->{$wanted->[0]}{$wanted->[3]};
> >           last;
> >       }
> >   }
> >
> >   return($trunkgroupid,$carriername,$carrier_active);
> > }
> >   
> thanks.. I am looking at your solution(looks very complicated) and also 
> will alos look into DBD::SQLite as well

It's not terribly complicated once you get used to references. I just 
extracted the differing parts from your loops so that I could replace 
them by a single one. 

And I made a mistake doing so, the code should have been like this:

for my $wanted ( 
      [outsideroute_group_m => route_name => \$routename, 
route_group_id => \$routegroupid], 
      [outsideroute_trunk_m => route_group_id => \$routegroupid, 
trunkgroup_id => \$trunkgroupid], 
      [outsideotrunkgroup_m => trunkgroup_id => \$trunkgroupid, 
carrier_id => \$carrierid], 
      [outsidecarrier_m => carrier_id => \$carrierid, carrier_name => 
\$carriername], 
      [outsidecarrier_m => carrier_id => \$carrierid, active => 
\$carrier_active], 
  ) {
    for (@dat) {
      if (exists $_->{$wanted->[0]}{$wanted->[1]} 
        and $_->{$wanted->[0]}{$wanted->[1]} eq ${$wanted->[2]}) {
          ${$wanted->[4]} = $_->{$wanted->[0]}{$wanted->[3]};
          last;
      }
    }
  }

 return($trunkgroupid,$carriername,$carrier_active);
}

I've forgotten the inner loop.

Maybe you'd like it better if I would have hidden the inner loop in a 
subroutine:

  my $routegroupid = findValue( 'outsideroute_group_m', 'route_name', 
$routename, 'route_group_id'); 
  my $trunkgroupid = findValue( 'outsideroute_trunk_m', 
'route_group_id', $routegroupid, 'trunkgroup_id'); 
  my $carrierid = findValue( 'outsideotrunkgroup_m', 'trunkgroup_id', 
$trunkgroupid, 'carrier_id'); 
  my $carriername = findValue( 'outsidecarrier_m', 'carrier_id', 
$carrierid, 'carrier_name'); 
  my $carrier_active = findValue( 'outsidecarrier_m', 'carrier_id', 
$carrierid, 'active'); 

 return($trunkgroupid,$carriername,$carrier_active);
}

sub findValue {
  my ($dat, $section, $lookup_key, $lookup_value, $value_key) = @_;
  for (@$dat) {
    if (exists $_->{$section}{$lookup_key}
     and $_->{$section}{$lookup_key} eq $lookup_value) {
      return $_->{$section}{$value_key};
    }
  }
}

Looking at it again, I would like it better as well.

Jenda
P.S.: The => (sometimes called "fat comma") is almost equivalent to 
an ordinary comma, the only difference is that if the thing to the 
left of the => looks like a word it's automaticaly quoted. So
  [one => two => $three]
is equivalent to
  ['one', 'two', $three]

It's just syntactic sugar.
===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz =====
When it comes to wine, women and song, wizards are allowed 
to get drunk and croon as much as they like.
        -- Terry Pratchett in Sourcery


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to