in reply to Re: Perl style... help me figure this out.
in thread Perl style... help me figure this out.

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.
  • Comment on Re^2: Perl style... help me figure this out.

Replies are listed 'Best First'.
Re^3: Perl style... help me figure this out.
by ikegami (Patriarch) on Feb 12, 2012 at 04:18 UTC
    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"; }
Re^3: Perl style... help me figure this out.
by Marshall (Canon) on Feb 08, 2012 at 22:06 UTC
    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".