my $record_line=0; my @records; my $index=0; while(<$DATA>){ if ($record_line != 2){ if(/^Data_Raw/){ $records[$index]->{Data_Line}=$.; $record_line=2; }elsif(/^Data_group/){ $record_line=1; my($title,@value)=split; $records[$index]->{Data_Group}=join(,' ',@value)); } }elsif(/^Data_Value/){ $index++; my($title,@value)=split; $records[$index]->{Data_value}=join(,' ',@value)); $record_line=0; } }