#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %lut; while () { chomp; my @cur = split(/;/); push @{$lut{$cur[0]}}, [@cur[1..$#cur]]; } print Dumper \%lut; _ _DATA_ _ KWER02;262;P1-3-1-1-5-2.0;80077 KWER02;15;P1-3-1-1-5-2.0;80078 KWER02;262;P1-3-1-1-5-1.0;80078 KWER02;15;P1-3-1-1-1-1.0;80093 TDUI01;46;P4-5-1.83;82180 WCOL02;13;P1-1-2-4.0.100;81684 KWER02;14;P1-3-1-1-1-1.0;80091 KWER02;262;P1-3-1-1-1-1.0;80092 WCOL02;14;P1-1-2-4.0.100;81685 WCOL02;15;P1-1-2-4.0.100;81686 WCOL02;13;P1-1-2-4.0.116;81687 TDUI01;46;P2-8-1.75;82189 SJAK01;46;P2-8-3.0;82197 TDUI01;46;P2-10-1.80;82198