#! /usr/bin/env perl use strict; use warnings; use 5.010; use Data::Dumper; my $path = '/path/to/dir'; my %files_by_ext; opendir my $dh, $path or die "opendir($path) failed: $!"; for my $entry ( readdir $dh ) { next if $entry =~ m/^\.\.?$/; my $ext = ( split m/\./, $entry )[-1]; next unless $ext; # push filename to HoA, key is filename's extension push @{ $files_by_ext{$ext} }, $entry; } closedir $dh; # check hash-of-arrays say Dumper \%files_by_ext; __END__