Ramprasad wrote:
> Hello all,
> I have to remove elements from an array if they match a particualr
> string and put it into another array
>
> eg if element matches index or default I want it to be in a new array
>
> I am trying this
> my @arr = qw( 01.html index.html aa.html bb.html cc.html dd.html );
>
>
> # the following does not compile
> #map {s/^(index|default).*/{push @new,$_}/e && delete $_ } @arr;
>
>
> #This works but it does not remove the array element
> map {s/^(index|default).*/{push @new,$_}/e && undef $_ } @arr;
>
> print Dumper([\@new,\@arr]);
>
> I get
> $VAR1 = [
> [
> 'index.html'
> ],
> [
> '01.html',
> undef,
> 'aa.html',
> 'bb.html',
> 'cc.html',
> 'dd.html'
> ]
> ];
>
> the element $arr[1] is undefed but not removed from the array
>
>
> Can I delete the element somehow
> I am going to run this for about 60,000 arrays and I cant afford
> needless if's and foreach's
You want the splice() function.
Here's one approach. I'm sure somebody can come up with one-liner...
#!/usr/bin/perl
use strict;
my @arr = qw( 01.html index.html aa.html bb.html cc.html dd.html );
my @new;
my $n = 0;
while ($n < @arr) {
push(@new, splice(@arr, $n, 1)), next if $arr[$n] =~
/^(index|default)/;
$n++;
}
print "@arr\n";
print "@new\n";
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]