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.#!/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";
In reply to Re: File handles and loops
by Neighbour
in thread File handles and loops
by dr.jekyllandme
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |