The one liners above are fine, but if I needed to incorporate this into a larger script, I would write the filtered data to a new file, then replace the original with the new file.
use strict;
use IO::File;
#open the original report for reading
my $file = IO::File->new("data.txt","r") or die($!);
#Create a new file to write to
my $filtered_file = IO::File->new("data_filtered.txt","w") or die($!);
#read report file
while ( my $line = <$file> ) {
#remove newline
chomp($line);
my ( $data, $number ) = split ",", $line;
$filtered_file->print("$line\n") if $number < 47;
}
$file->close;
$filtered_file->close;
# Replace the original file
rename("data_filtered.txt","data.txt");