Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: handling files using regular expression

by sundialsvc4 (Abbot)
on Jun 28, 2013 at 15:37 UTC ( #1041274=note: print w/ replies, xml ) Need Help??


in reply to handling files using regular expression

The first thing I’d say about this program is ... “always use real variables,” not “implied” stuff like $_ which can very easily get away from you.   Then, “start with a test case.” One example string, that you can verify gets correctly parsed by the regular-expression you intend to use.   You can even use a “Perl one-liner” like this:

perl -e 'my $str = "chr1:4777082-4777141"; \ my ($foo) = $str =~ /([0-9]+)/; print "foo is $foo\n";' foo is 1 ... oops, that's not right ... mike$ perl -e 'my $str = "chr1:4777082-4777141"; \ my ($foo) = $str =~ /[:]([0-9]+)/; print "foo is $foo\n";' foo is 4777082 ... correct.

Now, write your program, something like:

while (my $str = <INFILE>) { my ($foo) = $str =~ /[:]([0-9]+)/; # WE TESTED THIS die "Something's Wrong with $str!" unless ($foo); # NEVER ASSUME, NEVER ASSUME print OUTFILE "FILE=$foo\n"; # NOTICE DOUBLE-QUOTES }

We used the one-liners to verify the actual regular-expression parsing, to quickly get it right (and to uncover a subtle bug in the first attempt), then wrote code that is above all else, clear to do the actual work.

Within that program, we also added a die statement that will cause the program to test its assumption that every single record of the input will be handled correctly.   (We could make this test even-more aggressive if we knew that every record of the input file should contain seven digits, preceded by a ":" and followed by a "-", with: (see bold-faced parts)
/[:]([0-9]{7})[-]/)
Thus, the very fact that the program runs normally to completion, with a very stringent regular-expression that must be matched every time, is a strong indication that both the input data and the resulting output are correct.


Comment on Re: handling files using regular expression
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1041274]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (8)
As of 2015-07-28 06:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (252 votes), past polls