アプリ版:「スタンプのみでお礼する」機能のリリースについて

URI.pmのメソッドが失敗します。

#!/usr/bin/perl -w
use URI;
print(new URI("www.yahoo.co.jp")->host, "\n");

これを実行すると
Can't locate object method "host" via package "URI::_generic" at ./try line 3.
となります。

メソッド名が変わったのでしょうか。
私の本では確かにhostとなっているのです。

A 回答 (3件)

単に、


new URI( 'http://www.goo.ne.jp/' )
――みたいにすればよいのでは。
    • good
    • 0
この回答へのお礼

ありがとうございます。
これはしたり!
サーバー名だけではダメだったのですね!
頭にhttp://をつけたらできました!!

お礼日時:2008/09/26 00:19

http:// が付いていないと、host メソッドを呼び出すことはできないというわけですね。


今回のケースでは単に http:// を付けた URI を渡せばよいだけですが、もしも http:// が付いているかどうか分からない URI を受け取って、そのホスト部分を取得したいという場合は:

#!/usr/bin/perl

use strict;
use warnings;
use URI;

if (defined (my $input = <>)) {
chomp $input;
my $URI = URI->new($input);
$URI = URI->new("http://$input") unless $URI->can('host');
print $URI->host, "\n";
}

このように、can メソッドを使って host メソッドが呼び出し可能かどうか調べるという方法が考えられます。
    • good
    • 0
この回答へのお礼

詳しい解説をありがとうございます。
プロトコルつきのURLを渡さないとhostメソッドが失敗してしまうのですね!
インテリジェントなコード例もありがとうございます。
canの使い方を覚えました。
今後役に立つことでしょう。

お礼日時:2008/09/26 00:36

引数としてどんな形式のデータを渡せばよいかはリファレンスマニュアルに例示されています。


http://search.cpan.org/~gaas/URI-1.37/URI.pm

new URI('http://www.yahoo.co.jp')->host でも,URI->new('http://www.yahoo.co.jp')->host でも,お好きなようにどうぞ。
    • good
    • 0
この回答へのお礼

ありがとうございます!
プロトコルの指定が抜けていただけだったのですね!

URIのnewメソッドのhostメソッドなので
URI->new->host
のように記述する方がわかりやすくてイイですね!

お礼日時:2008/09/26 00:24

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