「これはヤバかったな」という遅刻エピソード

'http://www.***.com/~xyz/html/'
'../txt/test.txt'

の様な2つの文字列から

'http://www.***.com/~xyz/txt/test.txt'

の様な文字列を取得できるモジュールなどをご存知の方が居ましたら、是非教えていただけないでしょうか。
宜しくお願いします。

A 回答 (2件)

URIモジュールでそのものずばりのことが可能です



use URI;

$new = URI->new_abs('../txt/test.txt','http://www.abc.com/~xyz/html/');

↑により、$newに http://www.abc.com/~xyz/txt/test.txt が入る。
URIのnew_absの第一引数に相対、第二引数に絶対URIを入れればOKです。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

まさしく、こういうモジュールを探していました。
ドキュメントを軽く読んでみたのですが、URI::fileを使えば、windows環境のローカルファイルも扱えるようですね。
色々と試して、使いこなしてみようと思います。
(日本語訳のドキュメントは無さそうですが…。)

お礼日時:2004/10/23 23:58

モジュールではありませんが、例としてあげられたケースなら下記のコードでうまくいきました



$url = func('http://www.***.com/~xyz/html/', '../txt/test.txt');
print $url;

sub func {
my $url = $_[0].$_[1];

# xxx/../ --> "" に変換
1 while ($url =~ s#[^/]+/\.\./##);

# /./ --> / に変換
1 while ($url =~ s#/\./#/#);
return $url;
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

これに、ルート指定の「/」が加わればモジュールなしでも大丈夫そうですね。

一応、モジュールが使用できない環境への対策として参考にさせて頂きます。

お礼日時:2004/10/23 23:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!