use strict; use Data::Dumper; my $config; while () { chomp; my ($key, $variable)= ( $_ =~ /<(\w+?)>([^<]*)/); if ($key =~ m/JOBID/){ push (@{$config->{JOBID}},$variable); }else{ $config->{$key} = $variable; } } close FILE; print Dumper $config; __DATA__ 12345 101 102 103 add /tmp/file_data_gros 102 delete /tmp/file_myvalues #### $VAR1 = { 'JOBID' => [ '101', '102', '103', '102' ], 'FILE2' => '/tmp/file_myvalues', 'TYPE2' => 'delete', 'FILE1' => '/tmp/file_data_gros', 'TYPE1' => 'add', 'PROJECT_ID' => '12345' };