while (<>) { chomp; s/ //g; tr/a-z/A-Z/; } if (/^GRD/) { #### while ( ... ) { ... } if ( ... ) { ... } #### while ( ... ) { ... if ( ... ) { .... } } #### @GRD = split /,"?|""?/; #### close ARGV if eof; #### my @GRD = split /,/; warn "line $.: wrong number of attributes\n" unless @GRD == 6; check($GRD[0], 1, @GRDF1); check($GRD[1], 2, @GRDF2); ... check($GRD[5], 6, @GRDF6); sub check ( my($GRD, $col, $@GRDF) = @_; return if grep { $GRD eq $_ } @GRDF; print "line $.: \"$GRD\" is invalid in column $col\n"; }