%presence = ( 'hi' => [ { from => 65, to => 85 }, { from => 86, to => 106} ], 'bye' => [ { from => 12, to => 32 }, { from => 33, to => 53 } ], ); #### %presence = ( 'hi' => [ [65, 85], [86, 106] ], 'bye' => [ [12, 32], [33, 53] ], ); #### use constant FROM => 0; use constant TO => 1; #### my %presence; while() { my($name, $from, $to) = /^(\w+):\s+(\d+)\s+.*?\s+(\d+)$/ or next; push @{$presence{$name}}, { from => $from, to => $to }; # or, with arrays: # push @{$presence{$name}}, [ $from, $to ]; }