in reply to Modifying hash keys via the control variable

You are better off creating a new hash, since both keys and values are being modified.
my %newhash = map { my $list=$_; "\[mailto:$list\@example.com $list]" => { map { $_ => $_ eq 'desc' ? check_desc $lists{$ +list}{desc} : $lists{$list}{$_} } keys %{$lists{$list} } keys %lists;
Notes:
1 ) Untested
2) This is a Shallow copy of the inner hash.
3) '$list' is a confusing name for the key

             When in doubt, mumble; when in trouble, delegate; when in charge, ponder. -- James H. Boren