2010-03-09 12 views
5

Nello spirito della "Perl Preamble" in cui uno script funziona correttamente se eseguito da un interprete di script di shell o dell'interprete Perl ...rendere il mio file leggibile sia come Perl o HTML

Ho uno script Perl che contiene un documento HTML incorporato (come "heredoc"), vale a dire:

#!/usr/bin/perl 

... some Perl code ... 

my $html = <<'END' ; 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML><HEAD> 

... more HTML ... 

</HTML> 
END 

... Perl code that processes $html ... 

Vorrei essere in grado di lavorare sul codice HTML che è dentro lo script Perl e check it out utilizzando un browser web, ed eseguire solo il script quando l'HTML è come voglio io. Per fare ciò, ho bisogno che il file sia apribile sia come file HTML sia come script Perl.

Ho provato vari trucchi con commenti Perl e commenti HTML ma non riesco a ottenerlo abbastanza perfetto. Il file nel suo insieme non deve essere HTML "strettamente legale" (sebbene il documento incorporato dovrebbe essere) ... solo visualizzabile in un browser senza nessuna (o minima) immondizia Perl visibile.

MODIFICA: Risolto! Vedere la mia risposta

+2

Penso che il vostro set di soluzioni è l'insieme vuoto. Se intendi associare perl al file con uno shbang, allora hai bisogno della prima riga. Un commento SGML non può comparire prima di questa linea, quindi mostrerai lo shbang - e la maggior parte dei browser lo metterà come se fosse un documento personale - anche se rende HTML non standard. – Axeman

+0

Basta aggiungere qualche Javascript per rimuovere lo shebang dal DOM! – jrockway

+0

@Axeman, vedi il set vuoto qui sotto;) – JoelFan

risposta

6

leggerlo e WEAP signor @Axeman ... ora presento a voi l'insieme vuoto:

</dev/fd/0 eval 'exec perl -x -S $0 ${1+"[email protected]"}' #> <!-- 
#!perl 

... some Perl code ... 

my $html = << '<!-- END' ; # --> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
<HTML><HEAD> 

... more HTML ... 

</HTML> 
<!-- END 

... Perl code that processes $html ... 

# --> 
+2

Trucchetto pulito. Anche se vorrei ancora sconsigliarlo. Dovresti davvero avere cose separate in posti separati. –

+3

Ti lodo per la tua intelligenza. – Axeman

+3

+1 per l'incredibile hackishness.Ma, per il codice di produzione o qualsiasi altra circostanza in cui la manutenibilità è anche una preoccupazione minore, continuo a sostenere che l'utilizzo di modelli (come suggerito nella risposta che ho presentato ieri) causerà molto meno dolore a lungo termine. –

5

Questo suona come un percorso per il dolore. Prendi in considerazione la possibilità di memorizzare l'HTML in un file separato e di leggerlo all'interno dello script.

0

Hai considerato l'inserimento di Perl all'interno di di HTML?

Come ASP4 fa?

E 'molto facile in questo modo - credetemi ;-)

+1

Evidentemente Template :: Refine è l'approccio migliore;) – jrockway

+0

Interessante ... no ... ** fantastico **! – JDrago

4

Forse questo è un lavoro per Markup::Perl:

# don't write this... 
    print "Content-type: text/html;\n\n"; 
    print "<html>\n<body>\n"; 
    print "<p>\nYour \"lucky number\" is\n"; 
    print "<i>", int rand 10, "</i>\n</p>\n"; 
    print "</body>\n</html>\n"; 

    # write this instead... 
    use Markup::Perl; 
    <html><body><p> 
    Your "lucky number" is 
    <i><perl> print int rand 10 </perl></i> 
    </p></body></html> 

Si potrebbe anche cadere la linea use Markup::Perl ed eseguire lo script come

perl -MMarkup::Perl my_page_with_embedded_perl.html 

Quindi la pagina dovrebbe rendere abbastanza bene.

+0

Questo è decisamente bello ... – JoelFan

3

Mi sembra che si desideri una soluzione di modello, ad esempio Template::Toolkit o HTML::Template. Incorporare l'HTML nel codice o incorporare il codice nel codice HTML è una ricetta per il dolore.

Problemi correlati