use strict; no warnings 'redefine'; use Encode; use Data::Dumper; our $REAL; BEGIN { $REAL = \&Encode::decode_utf8; } sub Encode::decode_utf8 ($;$) { my $hash = shift; for (keys %{$hash}) { $hash->{$_} = $REAL->($hash->{$_}) } return $hash; } my $ref = Encode::decode_utf8({ foo => 1}); print Dumper($ref);