in reply to Re^9: Easiest way to filter a file based on user input
in thread Easiest way to filter a file based on user input

Oh okay, apologies for the buffoonery on my part.

The script seems to be working fine now, I added another next line: next if /^(\s\s-\d)/ && $1 > $limit;, because without it, it doesn't recognise regular Real numbers like -2, -5 etc.

The script:

#!/usr/bin/perl use strict; use warnings; use Regexp::Common qw /number/; print "Enter limit: "; chomp( my $limit = <STDIN> ); #$limit = abs($limit); open my $IN, '<', "xt_spacer_results.hairpin" or die $!; open my $SIFTED, '>', "new_xt_spacer_results.hairpin" or die $!; while (<$IN>){ next if /^None/; next if /^($RE{num}{real})/ && $1 > $limit; next if /^(\s\s-\d)/ && $1 > $limit; print $SIFTED $_; } close $IN; close $SIFTED;

Haukex, you are a legend, thanks.

Replies are listed 'Best First'.
Re^11: Easiest way to filter a file based on user input
by haukex (Archbishop) on Jul 16, 2017 at 14:05 UTC
    it doesn't recognise regular Real numbers like -2, -5

    It does, here's a way you can test that (see e.g. How to ask better questions using Test::More and sample data):

    use warnings; use strict; use Test::More; use Regexp::Common qw/number/; like "-2", qr/^$RE{num}{real}$/; like "-5", qr/^$RE{num}{real}$/; like " -5", qr/^$RE{num}{real}$/; done_testing; __END__ ok 1 ok 2 not ok 3 # Failed test at ... 1..3 # Looks like you failed 1 test of 3.

    As you can see, the problem isn't that it doesn't match integers, it's the whitespace at the beginning of the line. Try changing

    next if /^($RE{num}{real})/ && $1 > $limit; next if /^(\s\s-\d)/ && $1 > $limit;

    to

    next if /^\s*($RE{num}{real})/ && $1 > $limit;

    Where \s* means "zero or more whitespace characters" (perlretut).

      Oooh thanks!