Portál AbcLinuxu, 6. listopadu 2025 10:34
my $html = HTML::Tree->new();
$html->parse($page);
while ($html){
my ($id) = $html->look_down( 'id','o012' );
print encode_utf8($id->as_HTML ), "\n";
}
Potřeboval bych pomoc s nahrazením o012za něco jako
/o\d{3}/, aby mi při nalezení vzoru bylo toto id vypsáno.
Řešení dotazu:
/o(\d{3})/ && print $1;
look_down podporuje notaci s reg. objektem tak, že něco jako
$html->look_down( 'id',qr{o\d{3}} ), ale ten příklad je celý nějaký divný.
Co přesně má dělat?
ale ten příklad je celý nějaký divný.Školní zadání?
my ($id) = $tree->look_down( 'id',qr/o\d{3}/ );
fungluje jak ma. Vypise prvni vyskyt podle reg.vyrazu.
s Perlem zacinam uz tri mesice, chtel bych jeste v necem popostrcit
jak mam toto vse zacyklovat tak aby mi to proslo pres celou stranku a vyhledalo vsechen vyskyt
pomoci while mi to vypisuje jen prvni vyskyt hodnekrat zasebou
while($tree){
my ($id) = $tree->look_down( 'id',qr/o\d{3}/ );
print encode_utf8($id->as_HTML) , "\n";
}
my @id = $tree->look_down( 'id',qr{o\d{3}}xms );
foreach (@id) {
say $_->as_HTML;
}
m,qr,s lze použít libovolný znak nebo závorky
tedy lze psát např. m#a.*#; s[ahoj][cau]g atd. přičemž se doporučuje používat buď / / nebo { }
@ na začátku je pole(array) ty si tam měl ($id) což je list, s prvním prvkem $id tedy si dostal sice pole, ale při porovnání se vzal jen první prvek,
což v tomto případě (a shodou okolností) je to stejné jako kdyby si tam napsal jen $id
Podobně by si mohl ($id1,$id2) dostat první dva prvky.
rozdíl mezi $id a ($id) lze vidět třeba tady
my @array=('a','b');
my $id = @array;
my ($id)=@array;
kdy v tom případě bude v $id počet prvků(2) a v tom druhém první prvek('a')
jenom upozorňuji, že při zápisu my $id =('a','b') by byl v $id poslední prvek list tedy 'b'. :)
navíc si tam měl while přes $tree, které se v té smyčce nemění
tak záleží čeho si chtěl dosáhnout
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.