2010-03-09 4 views
5

Im Geiste der „Perl Preamble“, wo ein Skript funktioniert, ob ordnungsgemäß durch ein Shell-Skript-Interpreter oder dem Perl-Interpreter ausgeführt ...machen meine Datei lesbar als entweder Perl oder HTML

ich ein Perl-Skript, das enthält eine eingebettete HTML-Dokument (als „heredoc“), dh:

#!/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 ... 

ich auf dem HTML zu arbeiten in der Lage sein möchte, die innerhalb des Perl-Skript ist und es überprüfen einen Web-Browser, und führen sie nur die Skript, wenn HTML so ist, wie ich es möchte. Um dies zu erreichen, muss die Datei sowohl als HTML-Datei als auch als Perl-Skript geöffnet werden können.

Ich habe verschiedene Tricks mit Perl-Kommentaren und HTML-Kommentaren ausprobiert, kann es aber nicht ganz perfekt machen. Die Datei als Ganzes muss nicht "streng legal" HTML sein (obwohl das eingebettete Dokument sein sollte) ... nur in einem Browser anzeigbar, in dem kein (oder minimaler) Perl-Müll sichtbar ist.

EDIT: Gelöst! Siehe meine eigene Antwort

+2

Ich denke, Ihre Lösungsmenge die leere Menge ist. Wenn Sie perl mit der Datei per shbang assoziieren wollen, benötigen Sie die erste Zeile. Ein SGML-Kommentar kann nicht vor dieser Zeile vorkommen, also werden Sie den Shbang zeigen - und die meisten Browser werden ihn als eigenes Dokument angeben - auch wenn er nicht standardmäßigen HTML-Code enthält. – Axeman

+0

Fügen Sie einfach etwas Javascript hinzu, um den Shebang aus dem DOM zu entfernen! – jrockway

+0

@Axeman, siehe unten leeren;) – JoelFan

Antwort

6

es lesen und WEAP Herr @Axeman ... ich Ihnen jetzt vorliegenden die leere Menge:

</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

Ordentlicher Trick. Obwohl ich noch davon abraten würde. Du solltest wirklich getrennte Dinge an verschiedenen Orten haben. –

+3

Ich empfehle Sie auf Ihre Klugheit. – Axeman

+3

+1 für ehrfürchtige Hacksucht.Aber für Produktionscode oder andere Umstände, bei denen die Wartbarkeit sogar ein geringes Problem darstellt, behaupte ich immer noch, dass die Verwendung von Vorlagen (wie in der gestern eingereichten Antwort vorgeschlagen) Ihnen auf lange Sicht weit weniger Schmerzen bereiten wird. –

5

Das klingt wie ein Weg zum Schmerz. Erwägen Sie, den HTML-Code in einer separaten Datei zu speichern und im Skript einzulesen.

0

Haben Sie in Betracht gezogen, Perl in von HTML zu setzen?

Wie ASP4 funktioniert?

Es ist ein viel einfacher auf diese Weise - vertrauen Sie mir ;-)

+1

Clearly Template :: Refine ist der beste Ansatz;) – jrockway

+0

Interessant ... nein ... ** super **! – JDrago

4

Vielleicht ist das ein Job für 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> 

Sie könnten auch die use Markup::Perl Linie fallen und Ihr Skript laufen wie

perl -MMarkup::Perl my_page_with_embedded_perl.html 

Dann sollte die Seite ziemlich gut darstellen.

+0

Das ist definitiv cool ... – JoelFan

3

Klingt für mich wie Sie wollen eine Templat-Lösung, wie Template::Toolkit oder HTML::Template. Das Einbetten von HTML in Ihren Code oder das Einbetten von Code in Ihr HTML ist ein Rezept für Schmerzen.

Verwandte Themen