use Data::Diver qw( DiveVal ); # ... while( <...> ) { @val= split /\t/; DiveVal( \%Tech_fy_r­eldata, \( @val ) )= '0'; }