#!/usr/bin/perl -- use strict; use warnings; use Data::Dump; open my($DF), '<', \q{ brain0001 lung0001 brain00002 kidney0003 brain00003 }; my %dfs; while( <$DF> ){ chomp; /^(brain|lung|kidney)/ and push @{$dfs{$1}}, $_; } close $DF; dd \%dfs; __END__ { brain => ["brain0001", "brain00002", "brain00003"], kidney => ["kidney0003"], lung => ["lung0001"], }