Danke!
Wieso ist das keine saubere Lösung?
Ich habe das jetzt mal per HTML::TokeParser gelöst:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
my $p = HTML::TokeParser->new($file) ||
die "Can't open: $!";
my $head = {}; # Behälter für head-Tags
while (my $token = $p->get_token) {
# Abbruch bei Erreichen des body-Tags
if( $token->[0] eq "S" and $token->[1] eq 'body' ){
last;
}
#print Data::Dumper::Dumper($token);
# css_link
if( $token->[0] eq "S" and $token->[1] eq 'link' and $token->[2]->{'rel'} eq 'stylesheet' ){
push @{$head->{'css_link'}}, $token->[4];
}
# meta
if( $token->[0] eq "S" and $token->[1] eq 'meta' ){
push @{$head->{'meta'}}, $token->[4];
}
# title
if( $token->[0] eq "S" and $token->[1] eq 'title' ){
$head->{'title'} = $p->get_trimmed_text("/title");
}
# css_style
if( $token->[0] eq "S" and $token->[1] eq 'style' ){
push @{$head->{'css_style'}}, $p->get_trimmed_text("/style");
}
# js_script
if( $token->[0] eq "S" and $token->[1] eq 'script' and exists($token->[2]->{'language'}) and $token->[2]->{'language'} =~ /JavaScript/i ){
push @{$head->{'js_script'}}, $p->get_trimmed_text("/script");
}
}
print Data::Dumper::Dumper($head);
Worüber man sich noch streiten könnte ist, dass Leute ihr Scripten auch gerne irgendwo im Body platzieren (darf, bzw. soll man das?) und ich nur bis zum body-Start-Tag auslese.
Andererseits muss ich sowieso noch den body auslesen...
Mal sehen.
mfg pktm