Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: File handles and loops

by Neighbour (Friar)
on Jul 31, 2012 at 09:23 UTC ( #984589=note: print w/ replies, xml ) Need Help??

in reply to File handles and loops

Also, you could change your verification code to be somewhat more like this:

#!/usr/bin/perl use strict; use warnings; use v5.10; sub edit_file { my $my_file = shift; my $editor = $ENV{'EDITOR'} || 'vim'; system($editor, $my_file); } sub validate_file { my ($my_file) = @_; my $error; open(MY_FILE, '<', $my_file) or die "Unable to open file [$my_file +]: $!"; while(<MY_FILE>) { chomp; given ($_) { print("Checking [$_]\n"); if (/^[^[:lower:]]/) { # Line does not start with a lowerc +ase letter $error = "$_ does not begin with a lower case letter"; } if (/somethingorother/) { $error = "$_ has somethingorother"; } default { # Line is ok } } if ($error) { $error = "At line [$.]: $error"; close( MY_FILE ); return $error; # Stop parsing the file after the first err +or } } close(MY_FILE); return undef; } my $string = join( "\n", qw(howdy partner goodbye Friend saynora adios + Amigo) ); open(MY_FILE, '>', 'my_file.txt') or die "Can not open my_file.txt: $! +"; print MY_FILE $string; close(MY_FILE); edit_file('my_file.txt'); my $error = 'Nothing went wrong'; while ($error) { $error = validate_file('my_file.txt'); if ($error) { print "Error validating file: $error\n"; print "Hit return to continue: "; <STDIN>; edit_file('my_file.txt'); } } print "File is ok\n";
This uses a given-when construct to allow you to easily add more checks. It also incorporates some of the suggestions mentioned by other monks.
The validation-loop has been moved out of validate_file and the returnvalue of validate_file has been used in a more descriptive matter.
Note that this relies on the truth and falsehood of the empty string (undef is false, empty string is false, nonempty string is true).

Comment on Re: File handles and loops
Select or Download Code

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (18)
As of 2014-07-30 08:17 GMT
Find Nodes?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:

    Results (229 votes), past polls