use Text::ParseWords; use File::Basename; my %testhash = map { my ($file, $dir, $suffix) = fileparse((shellwords $_)[-1], '\.txt'); $file => $file . $suffix } @teststr;