Jerry Preston wrote:
>
> I know that this is a no brainer, but I cannot not get it! I want to
> compare two arrays and delete the same values in one array.
>
> foreach $j ( @a1 ) {
> foreach $p ( @a2 ) {
> $a2[ $p ] = undef if $a1[ $j ] == $a2 $p ];
> }
> }
>
> What is wrong and is there a better, PERL way to do this?
The first thing that's wrong is you're not starting with
use strict;
use warnings;
Your code doesn't work because you're iterating over the
values in the arrays instead of the indices. This will
work as you intended
foreach my $j (0 .. $#a1) {
foreach my $p (0 .. $#a2) {
$a2[$p] = undef if $a1[$j] == $a2[$p];
}
}
but you'll get warnings when undefined elements of
@a2 are being compared.
The Perl way to do it is to build a hash of the elements
of @a1 like this
my %a1 = map(($_, 1), @a1);
foreach (@a2) { $_ = undef if $a1{$_} };
HTH,
Rob
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>