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 > > > > Thanks > Ram
you might want to try: #!/usr/bin/perl -w use strict; my @index; my @pages = qw(index.html a.html default.html b.html c.html default2.html); @pages = grep{$_}map{/^(index|default)/?push(@index,$_) && undef:$_} @pages; print "@pages\n"; print "@index\n"; __END__ but is slow. david -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]