use strict; use warnings; use autodie; use Text::CSV_XS 1.18; print_Filenames_directory (); sub print_Filenames_directory { my $csv = Text::CSV_XS->new ({ binary => 1, auto_diag => 1 }); foreach my $file (glob "*.csv") { open my $fh, "<", $file or die $!; my @name = split m/_/ => $file; my $grpid = $name[0]; my $grpname = substr $name[1], 0, -4; my @headers = ("Group ID", "Group Name", @{$csv->getline ($fh)}); my @rows; while (my $row = $csv->getline ($fh)) { # update: forgot to remove the two unwanted splice lines push @rows, [ $grpid, $grpname, @$row ]; } close $fh; open $fh, ">", $file or die $!; $csv->say ($fh, \@headers); $csv->say ($fh, $_) for @rows; close $fh; } }