use strict; use warnings; use autodie; my $file = shift @ARGV; open my $fh, '<', $file; my @files; while ( my $line = <$fh> ) { chomp $line; push @files, $line unless $line =~ /^\s*$/; } #### use File::Spec; my $dirname; for my $name ( @files ) { if ( $name =~ s/:$// ) { # use trailing : to id dirname $dirname = $name; } else { my $fullpath = File::Spec->catfile( $dirname, $name ); # slurp or do whatever with file at $fullpath } }