Ir para conteúdo



Phperl


  • Por favor, faça o login para responder
Não há respostas para este tópico

#1 arnaldoestevao

arnaldoestevao
  • Membros
  • 1 posts

Postado 20 December 2007 - 02:09 PM

Phperl

Embora tenha grande admiração pelo PHP, sempre tive dificuldade em migrar meus aplicativos de CGI/Perl para PHP, não sei se por inabilidade minha, más sempre tenho um consumo elevado de memória quando habilito PHP no meu apache e uma queda significativa na performance das aplicações escritas em PHP comparada a mesma aplicação em CGI/Perl, no entanto sempre me incomodou o fato de não poder utilizar construtores WYSIWYG como o DreamWeaver ou o Kompozer para editar a arte das minhas páginas, trabalhei muito nos últimos dois anos com sistema de templates , e acredito que consegui chegar a uma técnica que tem sido tão produtiva que resolvi compartilhar com a comunidade.


I-O pulo do gato

Existem duas coisas que são o pulo do gato desta técnica

1-O fato da maioria dos construtores WYSIWYG e dos navegadores ignorarem o conteúdo dentro de uma tag
<?php ?>.

evidente pois o php é executado do lado do servidor e não do cliente

2-O poder da função eval() do perl
QUOTE
Esta função pode interpretar quase um programa inteiro escrito em perl até agora a única incompatibilidade que vi são as declarações de cabeçalho que não podem ser feitas em tempo de execução de um script perl, fora isto você pode escrever um sistema com milhares de linhas de código inclusive declaração de subs e uso de módulos do CPAN que ela irá executar tranquilamente


II-O interpretador PHPerl
QUOTE
Sintaxe:

Para a maioria dos editores de páginas HTML e navegadores tanto faz você escrever <?php ou <?php perl isto é apenas uma convensão conveniente, uma vez que as três primeira letras são iguais, tudo que vem depois até antes do próximo ?> será ignorado, muito útil para diferenciar o PHP legítimo do nosso pirata, ao fechar a tag eu tambem optei por usar endperl ?> para obter o mesmo benefício.

Nomes das páginas de templates:

É importante salvar os arquivos com a extensão .php, caso contrário alguns recursos de editores WYSIWYG ficarão indisponíveis como sintaxe highlight ou até mesmo em alguns casos como o Komposer eles eliminarão as tags intrusas do meio do HTML imaculado , entretanto novamente para não dar nó no cérebro, costumo usar .perl antes da extensão .php pra poder diferenciar, de modo que o nome da template helloworld ficara:

helloworld.perl.php

A técnica consiste em substituir estas tags por delimitadores de strings válidos para o perl e depois executar o código usando a função eval do perl




helloworld.cgi

CÓDIGO
#!/usr/bin/perl
use CGI qw/:standard/;

print header;

$phpperl=`cat /templates/helloworld.perl.php`;

#agora vamos substituir <?php perl por ];
$phpperl =~ s/\<\?php perl/\]\;/g  ;


#e substituir endperl ?> por  qq[
$phpperl =~ s/endperl \?\>/qq\[/g;

#embutindo a template
$perlcode=qq[ print qq[ $phpperl ] ];

#executando o codigo
eval($perlcode);

##Exibe a mensagem de erro se houver um erro
if ($@ ) { print $@}



helloworld.perl.php
QUOTE
<html><body>
<?php perl
print "Hello World !!" ;
print endperl ?>
</body></html>





Explicação passo a passo
QUOTE
repare como ficara a template após a substituição das tags

<html><body>
];
print "Hello World !!" ;
print qq[
</body></html>

#depois de embutido

print qq[<html><body>
];
print "Hello World" ;
print qq[
</body>></html>];


#melhorando a visualização

print qq[<html><body>];
print "Hello World!";
print qq[</html></body>];


Ok mas voce não quer apenas dizer Alo mundo não é então vamos contruir um form e uma tabela usando esta
técnica, eu vou alterar apenas o helloworld.perl.php




helloworld.perl.php

QUOTE
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Teste de $ENV{SCRIPT_NAME}</title>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="content-type">
<title></title>
</head>
<body>
<?php perl
$seunome=param('seunome');
print endperl ?>
Construção de um form e de uma tabela
<form>
Seu nome <input name="seunome" value="$seunome">
<input type="submit" name="enviar" value="Enviar">
</form>
<table border=1>
<?php perl for ($i; $i < 20 ; $i ++) { print endperl ?>
<tr>
<td>$i</td>
</tr>
<?php perl } print endperl ?>
<br>
</body>
</html>

<-- Quer ver funcionando ? Clique Aqui -->

Conclusão

QUOTE
Voce pode criar um script único passando a template como parâmetro ou pode criar um CGI para cada template, estou usando esta técnica de forma profissional , utilizando módulos geradores de graficos com CPAN->GD e conexões com o postgres tudo dentro das templates perl.php , a vantagem principal é poder abrir a template dentro do dreamweaver ou do NVU e trabalhar a parte de layout separada da parte do script como se fosse um script PHP Genuíno








0 usuário(s) está(ão) lendo este tópico

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)