I agree with Generoso and sundialsvc4 on the use of grep. Although, I would use the BLOCK form of grep in keeping with PBP Chapter 8, "Always use a block with a map and grep." Like this:
use strict; use warnings; open my $fh, '<', 'hosts' or die; my @hosts = <$fh>; close $fh; my @new_hosts = grep { !/$ARGV[0]/ } @hosts; print "\nnew_hosts:\n"; print join "", @new_hosts;
However, this does not address your desire to print the excluded lines. For that, you could do this:
use strict; use warnings; open my $fh, '<', 'hosts' or die; my @hosts = <$fh>; close $fh; print "Excluding these lines:\n"; my @new_hosts = grep { print $_ if /$ARGV[0]/; !/$ARGV[0]/} @hosts; print "\nThe new array:\n"; print join "", @new_hosts;
But at that point, maybe your for loop might be clearer.
In reply to Re: deleting a non-numeric scalar within array
by jffry
in thread deleting a non-numeric scalar within array
by pipeops
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |