[ { is a reference to an (anonymous) array of references to (anonymous) hashes. However, in the second snippet, you use it as a reference to a hash.
Anyway, the missing magic is Text::CSV and a hash slice.
use strict;
use warnings;
use Text::CSV qw( );
my $csv = Text::CSV->new();
open(my $fh_in, '<', 'input.txt')
or die("Can't open input.txt: $!\n");
while (<$fh_in>) {
$csv->parse($_)
or die("Incorrectly formatted line ($.)\n");
my %Employee_Rec;
@Employee_Rec{qw(
Emp_No
Emp_Lname
Emp_Fname
Emp_SSN
Emp_DOB
Emp_aka
)} = $csv->fields();
print "$Employee_Rec{Emp_No} \n";
print "$Employee_Rec{Emp_Lname} \n";
print "$Employee_Rec{Emp_Fname} \n";
print "$Employee_Rec{Emp_SSN} \n";
print "$Employee_Rec{Emp_DOB} \n";
print "$Employee_Rec{Emp_aka} \n";
}
Update: If you really did want to use field indexes,
use strict;
use warnings;
use Text::CSV qw( );
my $csv = Text::CSV->new();
my %Employee_Field_Idx_Lkup = (
Emp_No => 0,
Emp_Lname => 1,
Emp_Fname => 2,
Emp_SSN => 3,
Emp_DOB => 4,
Emp_aka => 5,
);
open(my $fh_in, '<', 'input.txt')
or die("Can't open input.txt: $!\n");
while (<$fh_in>) {
$csv->parse($_)
or die("Incorrectly formatted line ($.)\n");
my @fields = = $csv->fields();
my %Employee_Rec;
@Employee_Rec{keys %Employee_Field_Idx_Lkup}
= @fields[values %Employee_Field_Idx_Lkup];
print "$Employee_Rec{Emp_No} \n";
print "$Employee_Rec{Emp_Lname} \n";
print "$Employee_Rec{Emp_Fname} \n";
print "$Employee_Rec{Emp_SSN} \n";
print "$Employee_Rec{Emp_DOB} \n";
print "$Employee_Rec{Emp_aka} \n";
}
|