http://www.perlmonks.org?node_id=205999


in reply to subtract one array from another

This is a FAQ. Please research using perldoc -q and use super search before asking a question...

my %hash; $hash{$_}=1 foreach @array_1; @array_2=grep($hash{$_},@array_2);
When you do read the FAQ's you will find a number of variants of the above along with suggestions about how to do this with various constraints.

Also, perl is not restricted to C's overworked and confusing for() syntax. Your for loops above would be much simpler (and would involve less typing, and be less susceptable to fence pst errors) if done as follows

#for (my $search =0; $search<scalar @array1; $search++) # blech, this +isnt C you know for my $search (0.. $#array1) # ahhh thats m +uch better
HTH

Sorry to repeat other peoples responses, I failed to press "submit" and then went on to other things.... :-)

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

Replies are listed 'Best First'.
Re: Re: subtract one array from another
by antifun (Sexton) on Oct 17, 2002 at 13:49 UTC
    The $#array syntax is vaguely deprecated, IIRC...
    for my $search (0..scalar @array1)
    But since the .. operator takes scalar context, you can just say
    for my $search (0..@array1)

    (Update: the "vague deprecation" was from one of the Apocalypses. So it's safe for the indefinite future, I suppose. cf. Apocalypse 2)


    ---
    "I hate it when I think myself into a corner."
    Matt Mitchell
      Don't you need a -1 there someplace?
      perl -le ' @a = qw/a b c d/; print scalar @a; print $#a; __DATA__ output: 4 3 '

      -- Dan

      Yes I seem to remember hearing that... But then Juerd corrected me. I do not believe that it will in fact be going away.

      And of course as the someone else mentioned that should be @array1-1

      :-)

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