in reply to Perl style... help me figure this out.

The direly needed improvements:

One of many ways:

my %items = map { $_ => 1 } ( 'APPLES', 'SILVER', ); my %groups = ( 'cookies' => ['CHOCOLATE CHIP', 'PEANUT BUTTER'], 'previous metals' => ['SILVER', 'GOLD', 'PLATINUM'], ); my $lover; for my $group_name (keys(%groups)) { if ( grep $items{$_}, @{ $groups{$group_name} } ) { print "This guy loves $group_name.\n"; ++$lover; } } if (!$lover) { print "This guy loves nothing.\n"; }

Replies are listed 'Best First'.
Re^2: Perl style... help me figure this out.
by jaydstein (Novice) on Feb 07, 2012 at 17:31 UTC
    Agreed upon the direly needed improvements. This is definitely a step in the right direction, but it strays slightly from the technical requirements which I failed to communicate. -Ordering is important. Does this indicate that I should be using an AoA? -I would like to preserve the key-value relationship if at all possible.
      Yeah, you can use an array instead of a hash.
      my %items = map { $_ => 1 } ( 'APPLES', 'SILVER', ); my @groups = ( [ 'cookies', [ 'CHOCOLATE CHIP', 'PEANUT BUTTER' ] ], [ 'previous metals', [ 'SILVER', 'GOLD', 'PLATINUM' ] ], ); my $lover; for my $group (@groups) { my ($group_name, $group_members) = @$group; if ( grep $items{$_}, @$group_members ) { print "This guy loves $group_name.\n"; ++$lover; } } if (!$lover) { print "This guy loves nothing.\n"; }
      EDIT: I should have made it clear that ordering is important and that 'this guy' is a simple man and can only love one thing. I know that this hints that I should be using an array of arrays instead of a hash of arrays, but the key-value relationship is something I would like to preserve if at all possible.

      After reading your EDIT, I am confused as to what the requirements really are. What does "ordering is important" mean? Order of "what" exactly?

      A hash has no intrinsic "order" to the keys - you should assume that hash keys will come out in any order when you access a hash via (keys %hash) or (keys %$ref_2_hash).

      It would help at least me, if you could back up a bit.. Write some more text describing what data you have and the kind of "look-up" that you desire. It could be that excellent solutions are being offered to the "wrong problem".