User since
2003-08-07
2921
Artikel
BenutzerIn
Hallo!
Bei dem Aufruf print print_koords(*DATA); erhalte ich HTML::Parser=HASH(0x213c3f0)
Das ist soweit ich weis eine Referenz.
Wenn ich das jetzt aber mittels print \print_koords(*DATA)->{0} dereferenzieren will kommt nur SCALAR(0x216212c). Wie komme ich denn nun an den Wert da ran?
mfg pktm
PS: Die sub
sub print_koords {
my $p = HTML::Parser->new ( api_version => 3,
start_h => [ # Handler fuer Start-Tags
\&parse_start, 'tag, attr', # Uebergib Tag und Attribute
],
);
return $p->parse_file(*DATA);
} #print_koords
User since
2003-08-04
247
Artikel
BenutzerIn
Mit \ wird referenziert, nicht dereferenziert... das ginge in diesem Fall mit %{}, was aber hier nicht wirklich sinnvoll wäre, schätz ich mal...
parse_file() gibt scheinbar die Instanz ($p) wieder zurück, aber ich kenn mit mit HTML::Parser und seinen Methoden ned so wirklich aus...
User since
2003-08-04
1706
Artikel
HausmeisterIn
Also Das Objekt von HTML::Parser hat nicht den Sinn einen Rückgabe Werte zurückzugeben.
Ich versteh zwar auch nicht so recht wie HTML-Parser arbeitet aber so habe ich das mal gemacht:
my $htmltext;
my $p = HTML::Parser->new ( api_version => 3,
text_h => [sub {$htmltext .= join "",@_;}, 'text'],
);
$p->parse($htmlcode) or warn "could not parse $link: $!";
print $htmltext;
Gruß Alex
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
An was willst du denn heran? Der Rueckgabewert von parse_file() duerfte ziemlich uninteressant sein, und die Inhalte werden in der Funktion parse_start() auseinandergepflueckt. Da musst du sie dann irgendwo hin speichern.
User since
2003-08-07
2921
Artikel
BenutzerIn
Also besser ne Hash-Regferenz oder so zum füllen mitgeben?
mfg pktm
User since
2003-10-02
27
Artikel
BenutzerIn
Deine Hash-Referenz die du bekommst sieht mir stark nach einem Objekt aus!
Vielleicht gibt pars_file ja eines zurück.
Nimm mal Data::Dumper
und schau es dir an
&
s%%`^.*`s;.*;uhtnmo;;a>lha~a>inu~a>fmk~a>rou~a>duM~a>btl~s;&&&&&&;!d1!l2!b3!i4!f5!r6q(?);e;Z`
`}a>&&&`sub
s~Z~print~g;s/#/\\/g;s/`(.)(.+?)`(.+?)`/s${1}${2}${1}${3}${1}g\;/g;s;&;(.);g;y^"^&
print;
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
Ja, es gibt ein Objekt zurueck, naemlich den Parser selber (ein "$p->parse_file($bla)" liefert also $p zurueck). Oder undef, wenn die Datei nicht gelesen werden konnte. So steht's in der Doku, da braucht man gar nicht lange herumprobieren.