Thread HTML::Parser (4 answers)
Opened by sid burn at 2007-05-11 17:42

sid burn
 2007-05-11 17:42
#76646 #76646
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Hi zusammen,

irgendwie bin ich zur Zeit mit der OOP vom Modul HTML::Parser etwas unzufrieden. Ich stelle es mir eigentlich so vor das ich ein Objekt davon erstelle und Regeln definiere. Genau das geht ja auch. Aber innerhalb der Methoden habe ich irgendwie keine Möglichkeiten den Output irgendwo hinzuschreiben. Auser in Globale Variablen, oder von mir aus Closures. Das ist mir aber alles zu umständlich und schaut mir schon mehr nach einem Hack aus.

Ich würde mir eigentlich soetwas Wünschen:
Code: (dl )
 my $result = $p->parse( $text )


So das er den kompletten $text durchparst die Regeln anwendet und ich alles schön in einer lexikalischen Variable bekomme. Ist das irgendwie machbar?

Zur Zeit benutze ich solch einen "Hack":

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
package HTML::Parser;
our $output;

sub get_result {
my ($self, $text) = @_;

$HTML::Parser::output = undef;
$self->parse( $text );
$self->eof;
return $HTML::Parser::output;
}
}

my $p = HTML::Parser->new( api_version => 3 );
$p->handler( text => sub { $HTML::Parser::output .= $_[0] }, 'text' );


my $header = '<html><head><title>Der Titel</title></head></html>';
my $body = '<body>Jetzt fängt der Body an</body>';


print $p->get_result($header), "\n", $p->get_result($body), "\n";


Ich füge also eine Methode und eine Package Variable in HTML::Parser hinzu.

Der Handler speichert immer seinen Output bereits in der Package Variable. Jedesmal wenn ich meine Methode aufrufe, habe ich ein neues Stück Text was ich parsen möchte, sprich ich setze die Package Variable wieder auf undef.


Ich habe also die Möglichkeit soetwas wie im print unten zu machen, aber Glücklich bin ich mit dieser ganzen Vorgehensweise nicht.

Ich habe mir Tutorials zu HTML::Parser durchgelesen und die Doku, aber keine Möglichkeit gefunden das es sich so verhält wie ich es mir Vorstelle. Geht das nicht, oder habt ihr vielleicht eine andere Möglichkeit wie ich das ganze etwas "ungefährlicher" gestalten kann?
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de

View full thread HTML::Parser