On Aug 22, 5:44 am, [EMAIL PROTECTED] (Chris) wrote:

> my @gilligan = qw(red_shirt hat lucky_socks water_bottle);
> my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
> my @professor = qw(sunscreen water_bottle slide_rule batteries radio);
>
> my %all = (
>         Gilligan => [EMAIL PROTECTED],
>         Skipper => [EMAIL PROTECTED],
>         Professor =>  [EMAIL PROTECTED],
> );

Those three things look like sets (unordered) to me not lists
(ordered). The natural datatype in Perl to represent a set of strings
is a hash with keys but no values. Unfortunately there's no elegant
way to initialise such a structure in a single step. Here's one of the
least inelegant ways.

my %all;
@{$all{Gilligan}}{ qw(red_shirt hat lucky_socks water_bottle) }=();
@{$all{Skipper}}{ qw(blue_shirt hat jacket preserver sunscreen) }=();
@{$all{Professor}}{ qw(sunscreen water_bottle slide_rule batteries
radio) }=();

>                      unless (grep $item eq $_, %$all_ref{$crew}) {
>                               print "$crew is missing $item.\n";
>                      }

Using hashes this (which as has been point out elsewhere was wrong
anyhow) becomes:

                    unless ( exists $all_ref->{$crew}{$item} ) {
                              print "$crew is missing $item.\n";
                     }

Look ma, no loop.

But!... see my next reply


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to