open my $infile, '<', @ARGV[0]
or die ....
####
while ( my $line = ) {
chomp $line;
...
##
##
# at the top
use Readonly;
Readonly my $PATIENT_ID => 0;
Readonly my $DOB => 1;
# and in the main code ...
my %data;
my $linetype = determine_type( $line );
if ( $linetype == $PATIENT_ID ) {
process_patient( $line, \%data );
elsif ( $linetype == $DOB ) {
process_dob( $line, \%data );
elsif ...
##
##
given ( determine_type( $line ) ) {
when { $PATIENT_ID } { process_patient( $line, \%data ); }
when { $DOB } { process_dob( $line, \%data ); }
...
##
##
# define the process_hash near the top
#
Readonly my %PROCESS => ( $PATIENT_ID => \&process_patient,
$DOB => \&process_dob,
...
);
# and use it in the loop
#
my $type = determine_type( $line );
$PROCESS{$type}->( $line, \%data );