John W. Krahn wrote:
Richard Lee wrote:
something is wrong with this..
say %yahoo's key contains the variable , X
I wanted to go through the @array which has array of hashes... to see
if one of the value is equal to
X and if it is, wanted to assign the key of the @array to $ex_var..
Tracing the program, it only goes through 6 lines of keys in @t_array
(random keys) (it has 89 keys total).. what am i doing wrong?
while (my ($keys,$values) = each(%yahoo) ) {
no strict 'refs';
MF: for my $i (0 .. $#t_array) {
for ( my($k,$v) = each(%{ $t_array[$i] } ) ) {
The for loop is not doing what you appear to think it is supposed to
be doing:
$ perl -le'
my %hash = "A" .. "Z";
for my $c ( 1 .. 3 ) {
my $i;
for ( my ( $k, $v ) = each %hash ) {
print "$c ", ++$i, qq[: \$_ = "$_" \$k = "$k" \$v = "$v"];
}
}
'
1 1: $_ = "S" $k = "S" $v = "T"
1 2: $_ = "T" $k = "S" $v = "T"
2 1: $_ = "A" $k = "A" $v = "B"
2 2: $_ = "B" $k = "A" $v = "B"
3 1: $_ = "O" $k = "O" $v = "P"
3 2: $_ = "P" $k = "O" $v = "P"
You need to use each() in a while loop instead.
my $keys_b = qr/$keys/;
if ( $v =~ m/$keys_b/ ) {
$ex_var = $k;
last MF;
}
}
}
John
It is funny why this is not producing what I thought it would..
I will continue to dig till I get this..
cat ././ref_each.pl
#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
my %yahoo = qw(
uno one
dos two
);
my %color = qw(
white 10
yellow 20
red 30
);
my @combine = ( \%yahoo, \%color );
print Dumper(@combine);
for ( 0 .. $#combine ) {
for ( my ($k, $v) = each(%{ $combine[$_] } ) ) {
print "\$k is $k\n";
print "\$v is $v\n";
}
}
./././ref_each.pl
$VAR1 = {
'uno' => 'one',
'dos' => 'two'
};
$VAR2 = {
'white' => '10',
'red' => '30',
'yellow' => '20'
};
$k is uno
$v is one
$k is uno
$v is one
$k is white
$v is 10
$k is white
$v is 10
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/