Сделайте я получаю что-то, когда я преобразовываю мой $url
как это: $url = URI->new( $url )
?
#!/usr/bin/env perl
use warnings; use strict;
use 5.012;
use URI;
use XML::LibXML;
my $url = 'http://stackoverflow.com/';
$url = URI->new( $url );
my $doc = XML::LibXML->load_html( location => $url, recover => 2 );
my @nodes = $doc->getElementsByTagName( 'a' );
say scalar @nodes;
Конструктор модуля URI очистит URI за вас - например, правильно экранирует символы, недопустимые для URI конструкция (см. URI :: Escape ).
Модуль URI дает несколько преимуществ:
Преимущество, которое вы получаете от небольшого фрагмента кода, который вы показываете, минимально, но по мере того, как вы продолжаете работать над проблемой, возможно, просматривая сайт, URI становится более удобным, когда вы выбираете, что делать дальше.
Я удивлен, что никто об этом еще не упомянул, но $ url = URI-> new ($ url);
не очищает ваш $ url
и не возвращает его обратно для вас он создает новый объект класса URI
(или, скорее, одного, если его подклассы), который затем может быть передан другому коду, которому требуется объект URI
. В данном случае это не особенно важно, поскольку XML :: LibXML
, похоже, с радостью принимает местоположения в виде строк или объектов, но некоторые другие модули требуют, чтобы вы предоставили им объект URI
и отклонит URL-адреса, представленные в виде простых строк.