in reply to Get All Duplicated Elements in an Array (Once, without shifting)

Maybe I'm missing something, but...
for(@in){ $hash{$_}++; } foreach my $key (keys %hash){ print "$key is lonely\n" if ($hash{$key} == 1); print "$key has friends\n" if ($hash{$key} != 1); }


Update: changed %hash{$_}++ to $hash{$_}++ to make it correct.

  • Comment on Re: Get All Duplicated Elements in an Array (Once, without shifting)
  • Download Code

Replies are listed 'Best First'.
•Re: Re: Get All Duplicated Elements in an Array (Once, without shifting)
by merlyn (Sage) on Oct 15, 2002 at 01:14 UTC
    Well, the one thing you're missing is that %hash{$_}++ is illegal syntax, unless you've already projected forward about three years and are using Perl 6.

    -- Randal L. Schwartz, Perl hacker

      While it is true that %hash{$_}++ is illegal syntax, it is interesting to note that %hash->{$_}++ is not. (But it only works on actual hashes and not hash references.) AFAIK its a bug, but one that has basically become a feature.
      use Data::Dumper; use strict; use warnings; my %hash; %hash->{$_}=$_ foreach 0..5; print Dumper(\%hash); __END__ $VAR1 = { '0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5 };
      It embarrassed the crap out of me when I discovered this. I was reviewing some code of my colleagues, (relatively new to perl at the time) and identified these as compile time errors. He politely told me what I was full of :-) and then showed me it compiled (and worked) fine. Luckily he had a few other subtle bugs that I found so I managed to avoid looking like a complete moron. :-)

      --- demerphq
      my friends call me, usually because I'm late....

      How much of an estimate is 'about' and are you still confident with your prediction? :P

      -=( Graq )=-

      Are you really that bored that you have to rip on people for a typo? How old are you again?


        If you consider that a "rip on people", you've not been around here for very long.


        On a more serious note... has it really gotten so weird in here that I can't even point out when code won't compile?

        What boilerplate do I need to precede every posting with? Something like:

        The following comment is never meant personally. You are not your code. I most likely do not even know you personally, and don't make presumptions about your character or habits based on a single posting. I'm only commenting on the ability for the code you posted to do its stated task, with particular attention being paid to :
        • Security
        • Maintainability
        • Avoiding needless reimplementation
        • Contribution to the community
        If I sound like I'm flaming, please re-read the message a few more times until you see that it's about the code and the Perl community, and not about you personally. That is all. Thank you.
        Would that help?

        -- Randal L. Schwartz, Perl hacker