das geht mit HTML::Template sehr einfach
[html]
<TMPL_LOOP NAME=irgendwas>
<TMPL_IF NAME="_ _odd_ _"> (ohne leerzeichen zwischen den _ _)
<tr><td bgcolor="#FFFFFF">
<TMPL_VAR NAME=inhalt>
</td></tr>
<TMPL_ELSE>
<tr><td bgcolor="#E1E1E1">
<TMPL_VAR NAME=inhalt>
</td></tr>
</TMPL_IF>
</TMPL_LOOP>
[/html]
und beim HTML::Template->new den Parameter loop_context_vars auf was wahres setzen (sonst gibt es _ _odd_ _ nicht)