On Sun, Apr 3, 2011 at 5:05 PM, Wernher Eksteen <crypt...@gmail.com> wrote:
> Got this to work, but is there a better way to do this?
>
> #!/usr/bin/perl
>
> use strict;
> use warnings;
>
> my ( $val, @matched, @unmatched, %hash1, %hash2 );

someone else is sure to call you out on defining this stuff at the
beginning of the program before i am able to hit send, but i figured
i'd add to the message - don't do this.

>
> %hash1 = (
> "emcpowera" => "sdbd sddg sdfj sdhm",
> "emcpoweraa" => "sdae sdch sdek sdgn",
> "emcpowerbc" => "sdb sdbe sddh sdfk",
> "emcpowerc" => "sdbb sdde sdfh sdhk",
> "emcpowerd" => "sdba sddd sdfg sdhj",
> "emcpowerz" => "sdba sddd sdfg sdhj"
> );
>
> %hash2 = (
> "emcpowera1" => "/dwpdb006",
> "emcpoweraa1" => "/dwpdb033",
> "emcpowerbc1" => "/s00_11",
> "emcpowerbc2" => "/utl_file_dir",
> "emcpowerc1" => "/odsdb006",
> "emcpowerd1" => "/odsdb005"
> );
>
> foreach my $i (keys(%hash1)) {
>
>       foreach my $b (keys(%hash2)) {
>
>               if ($b =~ /$i[0-9]+/) {
>                       $val = $b;
>                       push @matched, "$i" . " $hash1{$i} " . "$b" . "
> $hash2{$b} " . "\n";

not sure i get this, you get the keys, check if they match and assign
the values, why not just use 'each' if you want to check both keys and
values?

>               }
>       }
>
>       if (not $i =~ /$val*/) {
>               push @unmatched, "$i" . " $hash1{$i} " . "\n";

how about elsif?
>       }
> }
>
> print " @matched";
> print " @unmatched\n";

you said you want a third hash, but then assign them to an array?

>
> --- RESULT ---
>
>  emcpoweraa sdae sdch sdek sdgn emcpoweraa1 /dwpdb033
>  emcpowerd sdba sddd sdfg sdhj emcpowerd1 /odsdb005
>  emcpowerc sdbb sdde sdfh sdhk emcpowerc1 /odsdb006
>  emcpowerbc sdb sdbe sddh sdfk emcpowerbc1 /s00_11
>  emcpowerbc sdb sdbe sddh sdfk emcpowerbc2 /utl_file_dir
>  emcpowera sdbd sddg sdfj sdhm emcpowera1 /dwpdb006
>  emcpowerz sdba sddd sdfg sdhj
>

so, lets do what you asked (i like hashes better anyway :) )

my %hash3, %nothash;
my $found = 0;
while( my( $ikey, $ival ) = each( %hash1 ) ) {
   while( my( $jkey, $jval ) = each( %hash2 ) ) {
      if( ( $ikey == $jkey ) and ( $ival == $ikey ) ) {
         $hash3{ $ikey } = $ival;
         $found = 1;
      }
   }
   if( $found == 0 ) {
   %nothash{ $ikey } = $ival;
   $found = 0;
}

not sure if that is any quicker and i just typed it, so it should work, but...

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to