John W. Krahn wrote:
As you have seen when using Tie::File removing the contents of a line do not remove that line. You have to splice the tied array: my $line_to_remove; for my $i ( 0 .. $#file ) { $line_to_remove = $i if /foo/; } splice @file, $line_to_remove, 1; If you have more than one line to remove: my @lines_to_remove; for my $i ( 0 .. $#file ) { unshift @lines_to_remove, $i if /foo/; }
for my $i ( 0 .. $#file ) { unshift @lines_to_remove, $i if $file[$i] =~ /foo/; } OR my $i = 0; foreach ( @file ) { unshift @lines_to_remove, $i if /foo/; ++$i; }
for ( @lines_to_remove ) { splice @file, $_, 1; } And if you want to do it with one loop: for my $i ( reverse 0 .. $#file ) { splice @file, $i, 1 if /foo/; }
Nice use of unshift() to avoid reverse(). Like it. Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>