I haven't used cgi.pm in a long time, and I don't even remember using syntax like that (and come to think of it, the syntax as shown doesn't even make much sense in nesting terms, I think there's some typos in there), but I would have to guess that this sort of structural change would do it:
$cgi->Tr({ -align=>LEFT, -valign=>TOP},
[
td( { },
[ $cgi->a( {-href=>"..", -target=>"_new"} ) .
$cgi->img(..)
]
),
td( { -OnClick=>"javascript:dothis()" },
[ $cgi->a( {..}, $value1 ),
$cgi->hidden( -name=>'name2', -value=>'$value2' ).
$cgi->a( $value2),
$cgi->hidden( -name=>'name3', -value=>'$value3' ).
$cgi->a( $value2)
]),
]);
Basically, split that td clause into two seperate ones, one without the javascript attribute containing the first td, and one with it containing the other three.