J'essaie d'analyser un document HTML pour un programme d'indexation Web. Pour ce faire, j'utilise HTML::TokeParser.Vous ne pouvez pas utiliser de chaîne comme une référence de hachage ..?
Je reçois une erreur sur la dernière ligne de ma première instruction if:
if ($token->[1] eq 'a') {
#href attribute of tag A
my $suffix = $token->[2]{href};
qui dit Can't use string ("<./a>") as a HASH ref while "strict refs" in use at ./indexer.pl line 270, <PAGE_DIR> line 1.
est mon problème (? Le suffixe ou <./a>
) est une chaîne et doit être transformé en un ref de hash? J'ai regardé d'autres messages qui ont eu des erreurs similaires .. mais je ne suis toujours pas du tout sûr de ça. Merci pour toute aide.
sub parse_document {
#passed from input
my $html_filename = $_[0];
#base url for links
my $base_url = $_[1];
#created to hold tokens
my @tokens =();
#created for doc links
my @links =();
#creates parser
my $p = HTML::TokeParser->new($html_filename);
#loops through doc tags
while (my $token = $p->get_token()) {
#code for retrieving links
if ($token->[1] eq 'a') {
# href attribute of tag A
my $suffix = $token->[2]{href};
#if href exists & isn't an email link
if (defined($suffix) && !($suffix =~ "^mailto:")) {
#make the url absolute
my $new_url = make_absolute_url $base_url, $suffix;
#make sure it's of the http:// scheme
if ($new_url =~ "^http://"){
#normalize the url
my $new_normalized_url = normalize_url $new_url;
#add it to links array
push(@links, $new_normalized_url);
}
}
}
#code for text words
if ($token->[0] eq 'T') {
my $text = $token->[1];
#add words to end of array
#(split by non-letter chars)
my @words = split(/\P{L}+/, $text);
}
}
return (\@tokens, \@links);
}
J'imprimer des instructions de débogage pour voir exactement ce qu'il pense jeton via Data :: Dumper (jeton $) et aussi pour voir quel $ jeton -> [1] est. Ce pourrait être un 'ou quelque chose de similaire qui bousillerait les valeurs. – scrappedcola