Não senhor! Não se coloca 99% dos códigos de controle para dentro do template, nunca!
Nunca se usa um código como "$recordset->getvalue(0,0)" num template, seu código tera que passar um valor que será usado no template. Os sistemas de template possuem estruturas de controle porque elas ajudam a construir a visualização, como no seu exemplo de cores (que não possui nada referente ao controle, somente visualização) mas que não devem ser utilizadas para o controle da aplicação. Você continuará a usar seus códigos (inclusive com declaração de subs e mais de 100 linhas de código) só que agora retirará dele tudo o que é referente a visualização, facilitando (e muito) a manutenção do seu sistema.
Para não visualizar a mensagem de erro genérica do apache, bastará colocar um parâmetro que liga a debugação, fazendo com que o mesmo exiba a saída de depuração do script, ao invés do referido erro. O parâmetro é o seguinte: ErrorLog /usr/local/apache/logs/error_log que deve ser colocado no httpd.conf do apache (algumas distros mudam o nome ou a localização desse arquivo, mas creio que a maioria das distros o colocam em /etc/httpd/httpd.conf ou /etc/apache/httpd.conf), assim voltará a ser tão fácil depurar seus script quanto era antes. Caso você utilize mod_perl, será mais fácil ainda, nem precisará ver os logs, ele tem uma diretiva de debugação, mas lembre-se de desligar esses mecanismos quando for configurar um servidor de produção. Quanto a última vantagem que você apontou, o código do template não seria o que você colocou, seria o seguinte:
<a href="<% link %>" />
sendo que o caractere "$" foi eliminado. Com todo o respeito, essa opção é evidentemente superior, só pelo fato de não conter caracteres que podem atrapalhar os editores. Quem se encarregará de setar o valor de "link" será o seu programa que faz uso do template. Por fim, teste todas as opções de mudança de tag do sistema de templates no komposer, com certeza alguma não causará conflito com ele. Provavelmente a sintaxe funcionará, teste o exemplo abaixo e por favor poste aqui se isso deu certo ou não:
<table>
...<tr><td>cabeçalho</td></tr>
...<!-- FOREACH i in lista -->
......<!-- if i%2 == 0 -->
.........<tr><td>Linha par </td></tr>
......<!-- END -->
......<!-- ELSE -->
.........<tr><td>Linha impar </td></tr>
......<!-- END -->
</table>
Eu optei por utilizar os templates no comentário, que deve ser previamente configurada, conforme link que eu já postei.
Por favor, substitua os pontos por espaços, eu os coloquei para que o código ficasse identado. Usei a operação "%" que já calcula o resto da divisão inteira. Creio que qualquer raio de editor possa trabalhar com esse código, afinal de contas os comandos serão reconhecidos como comentários para ele. Dá pra retirar alguns "<!--" e "-->", mas colocando cada comando em um bloco do template eu achei que ficou mais didático.
notas adicionais:
* o desempenho do php é lento, mas um acelerador de cache resolve o problema
http://www.ducea.com/2006/10/30/php-accelerators/
* se o comportamento do Dreamweaver não puder ser alterado, você pode alterar a configuração do template da seguinte forma:
my $template = Template->new({
...START_TAG => quotemeta('<!--'),
...END_TAG => quotemeta('->'),
});
obs: Talvez o seu legado de aplicações funcionando com o seu sistema PHPerl seja grande demais para mudar assim, de uma hora para outra, mas quando for iniciar um novo sistema, considere a hipótese de separar o código de controle da visualização, eu te garanto que não se arrependerá. Utilize também um mapeador objeto-relacional e você já estará pronto para fazer um sistema MVC sem nenhuma dor de cabeça!