> I suggest you reduce your tab size from eight characters, which leave
> your code spread out and less readable. Four or two is more usual
> nowadays.
Thank you, I will do so from now on.
> Meaningful variable names are also important. Using $i as the key to
> %hash1 and $b as the key to %hash2 is a very bad idea: both have
> different conventional uses and $b is a special variable used internally
> by Perl.
Thanks you, I will add more descriptive names in future. I didn't know $b
is a special internal variable used by Perl.
> Long chains of concatenated strings can be improved visually by
> interpolation:
>
> push @matched, "$i $hash1{$i} $b $hash2{$b}\n";
>
> or formatting:
>
> push @matched, sprintf "%s %s %s %s\n", $i, $hash1{$i}, $b, $hash2{$b};
Wow, thanks!
> As for an improved version, your main purpose seems to be to combine
> data that belongs under the same /emcpower.*/ prefix. The program below
> does this by modifying %hash1, rather than building two new arrays as
> yours does. If this is unacceptable then come back to us.
This is acceptable, thank you!
> The program iterates over the records in %hash2, removes the decimals
> from the end of the key, and uses the result to select the record in
> %hash1 that should be appended to.
Thank you, I definitely still need to familiarize myself better with
hashes and I
am working on getting there. From the likes of you and others in this
list I will
achieve this goal much quicker than just by myself.
> HTH,
Yes, it does very much, thank you!
> Rob
>
>
>
> use strict;
> use warnings;
>
> my %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",
> );
>
> my %hash2 = (
> emcpowera1 => "/dwpdb006",
> emcpoweraa1 => "/dwpdb033",
> emcpowerbc1 => "/s00_11",
> emcpowerbc2 => "/utl_file_dir",
> emcpowerc1 => "/odsdb006",
> emcpowerd1 => "/odsdb005",
> );
>
> for my $key2 (keys %hash2) {
> (my $key1 = $key2) =~ s/\d+\z//;
> if ($hash1{$key1}) {
> $hash1{$key1} = "$hash1{$key1} $key2 $hash2{$key2}";
> }
> }
>
> foreach my $key1 (sort keys %hash1) {
> print "$key1 $hash1{$key1}\n";
> }
>
> **OUTPUT**
>
> emcpowera sdbd sddg sdfj sdhm emcpowera1 /dwpdb006
> emcpoweraa sdae sdch sdek sdgn emcpoweraa1 /dwpdb033
> emcpowerbc sdb sdbe sddh sdfk emcpowerbc1 /s00_11 emcpowerbc2 /utl_file_dir
> emcpowerc sdbb sdde sdfh sdhk emcpowerc1 /odsdb006
> emcpowerd sdba sddd sdfg sdhj emcpowerd1 /odsdb005
> emcpowerz sdba sddd sdfg sdhj
>
>
This is really totally awesome, thank you so very much!
I really like what you have done with this line, it's very cool!
emcpowerbc sdb sdbe sddh sdfk emcpowerbc1 /s00_11 emcpowerbc2 /utl_file_dir
But, I plan to add things like "disk size", "disk size used" and
"disk size free" numeric values
next to each partition mount ( emcpowerbc1 /s00_11 ) and (emcpowerbc2
/utl_file_dir) in this case,
so I would prefer to have it like this instead:
emcpowerbc sdb sdbe sddh sdfk emcpowerbc1 /s00_11
emcpowerbc2 /utl_file_dir
or
emcpowerbc sdb sdbe sddh sdfk emcpowerbc1 /s00_11
emcpowerbc sdb sdbe sddh sdfk emcpowerbc2 /utl_file_dir
Could you please show me how to change your excellent code to achieve
either one of these instead?
Many thanks!
Wernher
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/