#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @data = ( {unit => 'S', value => 50, }, {unit => 'T', value => 60, }, {unit => 'Q', value => 70, }, ); LOCAL_BLOCK: { my $cmd; $cmd .= "local \$data[$_]{unit} = 'S';\n" for 0 .. $#data; $cmd .= 'print Dumper \@data'; eval $cmd; } print Dumper \@data;