use Scalar::Util qw(readonly);; my %hash = ( A => 1 ); while ( my ( $abc, $num ) = each %hash ) { print "$abc\n"; print "$abc is readonly\n" if readonly($abc); my $bar = $abc; print "bar is readonly\n" if readonly($bar); foo($abc); print "$abc is still readonly\n" if readonly($abc); } sub foo { $_[0] .= 'FOO'; } #### A A is readonly bar is readonly