2010-09-20 34 views
1

Je suis nouveau à perl mais je me demandais si quelqu'un connaissait un script qui était similaire à la version suivante de PHP qui fonctionne très bien!Comment puis-je trouver l'URL complète d'une URL relative en Perl?

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); 
} 

Toute aide est très appréciée

+1

Juste pour que nous sommes tous clairement ici, qu'est-ce exactement que fonctionnent-ils? Quelle est l'entrée, quelle est la sortie? – CanSpice

+0

'$ base = http://foo.com/bar/poo/ $ href = ../ foobar' –

+0

wow un convertisseur PHP-> Perl, le public devient-il sage? – vol7ron

Répondre

9

Voir URI:

#!/usr/bin/perl 

use strict; use warnings; 
use URI; 

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

Sortie:

http://foo.com/bar/foobar
+0

:-) convertir maintenant! –

+0

@Sinan Ünür: +1. C'est génial à quel point vos réponses sont rapides et précises. – dawg

+0

ne fait pas vraiment ce que je demandais mais merci quand même. –