追記

さらにテスト。まず、in.plを以下のように。

#!/usr/bin/perl

$ENV{hoge} = "sawa";
exec('./out.pl');
__END__

で、out.plを以下のように。

#!/usr/bin/perl

use Data::Dumper;
print Dumper $ENV{hoge};

すると、

$ ./in.pl
$VAR1 = 'sawa';

という出力になります。

で、さらにin.plを

$ENV{hoge} = {name => 'sawa'};
exec('./out.pl');

とすると、

$ ./in.pl
$VAR1 = 'HASH(0x85cec28)';

となります。
setenvを行なっているのは間違いないですが、その際にデータ構造などはDumperとかをしているわけではなくて、単に文字列にされているようですね。