У меня есть wget
-подобный скрипт, который загружает страницу, а затем извлекает все файлы, связанные в тегах IMG на этой странице.
Учитывая URL исходной страницы и ссылку, извлеченную из тега IMG на этой странице, мне нужно создать URL для файла изображения, который я хочу получить. В настоящее время я использую функцию, которую я написал:
sub build_url {
my ( $base, $path ) = @_;
# if the path is absolute just prepend the domain to it
if ($path =~ /^\//) {
($base) = $base =~ /^(?:http:\/\/)?(\w+(?:\.\w+)+)/;
return "$base$path";
}
my @base = split '/', $base;
my @path = split '/', $path;
# remove a trailing filename
pop @base if $base =~ /[[:alnum:]]+\/[\w\d]+\.[\w]+$/;
# check for relative paths
my $relcount = $path =~ /(\.\.\/)/g;
while ( $relcount-- ) {
pop @base;
shift @path;
}
return join '/', @base, @path;
}
Дело в том, что я определенно не первый, кто решает эту проблему, и на самом деле это такая общая проблема, что я предполагаю, что должен быть какой-то лучший, более стандартный способ решения этой проблемы, используя либо основной модуль, либо что-то из CPAN - хотя через основной модуль предпочтительнее. Я думал о File::Spec
, но не был уверен, что он обладает всеми необходимыми мне функциями.