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/