追記
さらにテスト。まず、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とかをしているわけではなくて、単に文字列にされているようですね。