Thread Parameter und Subroutinen (Prototypen, Referenzen?!) (15 answers)
Opened by Bob at 2011-05-21 10:48

Bob
 2011-05-21 14:25
#148965 #148965
User since
2011-05-21
6 Artikel
BenutzerIn
[default_avatar]
Wow, da ist man mal eben einkaufen … Danke für die zahlreichen Antworten in der Zwischenzeit!

@moritz: Hast du da nicht einen Denkfehler drin? Nach meinem Verständnis fungiert der Parameter 'foo' in deinem Beispiel als Separator, das Array ist leer, so dass der Separator genau einmal ausgegeben wird.

Aber am besten erkläre ich tatsächlich erst einmal mein gesamtes Vorhaben: Ich möchte den Inhalt von HTML-Dateien verarbeiten bzw. bestimmte Teile davon. Zum Parsen der HTML-Dateien benutze ich HTML::TreeBuilder, der ein Array zurückgibt. Das sieht dann so aus:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl -w

use strict;
use warnings;

use HTML::TreeBuilder::XPath;
use LWP::Simple;

my $html = get("http://www.perl.org");

my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse($html);

my @contents = $tree->findvalues(q{//p[@class="intro"]});
# usw.

$tree->delete;

print join ("", @contents);

An manchen Stellen erscheint es mir sinnvoll, die Zeilenumbrüche beizubehalten, z.B. bei Fließtext. Dafür soll der Switch dienen. (Bei dem einen Parameter handelt es sich als auf jeden Fall um ein Array, bei dem anderen um einen Skalar.)

@MatthiasW, rosti: Hashes als Parameter an eine Funktion zu übergeben, erscheint mir etwas unintuitiv, aber anders scheint es wohl nicht zu gehen, oder? Jedenfalls habe ich eure – angepassten – Code-Beispiele nicht zum Laufen bekommen.

@MatthiasW: Habe ich das richtig verstanden, dass der Funktionsaufruf wie folgt aussehen müsste?

Code: (dl )
$article = array_to_string({array => @contents, switch => "\n"});

Das führt bei mir zu folgender Fehlermeldung:

Code: (dl )
1
2
3
Odd number of elements in anonymous hash at [...] line 125, <STDIN> line 1.
Reference found where even-sized list expected at [...] <STDIN> line 1.
Can't use an undefined value as an ARRAY reference at [...] <STDIN> line 1.

Bei dem Code-Beispiel von rosti kommt nur der "Odd number"-Fehler, dafür zweimal:

Code: (dl )
1
2
Odd number of elements in anonymous hash at [...] <STDIN> line 1.
Odd number of elements in anonymous hash at [...] <STDIN> line 1.


Ich bin mit diesen Meldungen leider etwas überfordert!

modedit Editiert von GwenDragon: Code- auf Perl-Tag geändert, macht Perl-Code lesbarer
Last edited: 2011-05-21 14:30:03 +0200 (CEST)

View full thread Parameter und Subroutinen (Prototypen, Referenzen?!)