in reply to How to compare hash value

my %merge; for my $key ( keys %myhash ) { push $merge{join $;, sort @{$myhash{$key}}}, $key; }
assuming $; doesn't appear in any of your values.

Update: Use the corrected code below. Thanks, Adam. I'll leave the @{} out above for continuity.

                - tye

Replies are listed 'Best First'.
Re: Re: How to compare hash value (sort, join, hash)
by Adam (Vicar) on Apr 25, 2003 at 17:25 UTC
    Tye, you are pushing onto a scalar. Perl usually prefers for you to push things onto an array. :)

    >perl -Mstrict -we "my $foo = []; push $foo, 'bar'"
    Type of arg 1 to push must be array (not private variable) at -e line 1, at EOF
    Execution of -e aborted due to compilation errors.
    
    >perl -Mstrict -we "my %h; push $h{foo}, 'bar'"
    Type of arg 1 to push must be array (not hash element) at -e line 1, at EOF
    Execution of -e aborted due to compilation errors.
    
    I think what you wanted to say here was:
    my %merge; for my $key ( keys %myhash ) { push @{ $merge{ join $;, sort @{ $myhash{$key}} } }, $key; }
    I like it though, and it helps me solve an e-mail consolidation problem I had been working on.
    -Adam