Hi Duncan and James,
On Tue, 9 Feb 2016 14:58:05 +0000
Duncan Ferguson <[email protected]> wrote:
> I disagree – hashes are not weird – they are incredibly useful. It is just
> an array indexed by a word instead of a number ☺
>
I agree with Duncan here. Hashes are an integral part of idiomatic Perl and one
should learn how to use them properly and use them often - when appropriate.
For some resources for learning about hashes see:
* http://perl-begin.org/topics/hashes/
Otherwise, James’s code suffers from many bad idioms. For how to improve it,
see:
* http://perl-begin.org/tutorials/bad-elements/
(Note: perl-begin.org is a web site that I maintain.)
Below is one comment on Duncan's code:
>
>
> Here is some working code that may help
>
> ===
>
> #!/usr/bin/perl
>
> use strict;
>
> use warnings;
>
>
>
> my @array = ( qw/ 11_ 22_ 33_ 33_ 33_ 44_ 44_ 55_ / );
>
>
>
> my %results;
>
>
>
> # create a hash of arrays
>
> for my $item (@array) {
>
> push(@{ $results{$item} }, $item);
>
> }
>
>
>
> # For each entry in the hash
>
> for my $key (sort(keys(%results))) {
>
> # make a local array back out of what is stored in the hash
>
> my @arr = @{ $results{$key}};
>
> print "key=$key:", $/;
>
> # print out the indexes of items in the local array
>
> print " $key$_",$/ foreach (0 .. $#arr)
>
Since you're only using key and the length of the $results{$key} array
reference, you might as well just store a count which you can increment using
either of the ++ operators. Moreover, do you wish to preserve the order of the
occurrences?
Regards,
Shlomi Fish
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/