#! /usr/bin/perl -w use strict; use Data::Dumper; my %data; while ( ) { chomp; my ( $begin, $end, $tag, @vals ) = split /[-,:]/; push @{$data{$begin}{$tag}{end_vals}}, $end; push @{$data{$begin}{$tag}{vals}}, @vals; } print Dumper \%data; __DATA__ 100-233,MA,150:250 100-344,MA,350: 200-400,ER, 200-300,ER,576