Я удивлен, что никто еще не упомянул об этом, но $url = URI->new( $url );
не очищает ваш $url
и не возвращает его вам, он создает новый объект класса URI
(или, скорее, одного если его подклассы), который затем может быть передан в другой код, который требует объект URI
. Это не особенно важно в этом случае, так как XML::LibXML
, кажется, рад принять местоположения в виде строк или объектов, но некоторые другие модули требуют, чтобы вы дали им объект URI
и отклонили URL, представленные в виде простых строк.