如何在Perl中找到相对URL的完整URL?

时间:2010-09-20 16:59:31

标签: perl url href base

我是perl的新手,但是想知道是否有人知道一个类似于以下PHP版本的脚本,该脚本效果很好!

private function resolve_href ( $base, $href ) {
    if (!$href)
        return $base;
    $rel_parsed = parse_url($href);
    if (array_key_exists('scheme', $rel_parsed))
        return $href;
    $base_parsed = parse_url("$base ");
    if (!array_key_exists('path', $base_parsed))
        $base_parsed = parse_url("$base/ ");
    if ($href{0} === "/")
        $path = $href;
    else
        $path = dirname($base_parsed['path']) . "/$href";
    $path = preg_replace('~/\./~', '/', $path);
    $parts = array();
    foreach ( explode('/', preg_replace('~/+~', '/', $path)) as $part ) { 
        if ($part === "..")
            array_pop($parts);
        elseif ($part!="") 
            $parts[] = $part;
    }
    $dir =  ( ( array_key_exists('scheme', $base_parsed)) ? $base_parsed['scheme'] . '://' . $base_parsed['host'] : "" ) . "/" . implode("/", $parts);
    return str_replace( "\/", '', $dir );
}

非常感谢任何帮助

1 个答案:

答案 0 :(得分:9)

请参阅URI

#!/usr/bin/perl

use strict; use warnings;
use URI;

my $u = URI->new_abs('../foobar', 'http://foo.com/bar/poo/');
print $u->canonical;

输出:

http://foo.com/bar/foobar