• ベストアンサー

URI.pmの使い方を教えてくださいm(__)m

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となっているのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

単に、 new URI( 'http://www.goo.ne.jp/' ) ――みたいにすればよいのでは。

zyousuke
質問者

お礼

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

その他の回答 (2)

回答No.3

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 メソッドが呼び出し可能かどうか調べるという方法が考えられます。

zyousuke
質問者

お礼

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

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

引数としてどんな形式のデータを渡せばよいかはリファレンスマニュアルに例示されています。 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 でも,お好きなようにどうぞ。

zyousuke
質問者

お礼

ありがとうございます! プロトコルの指定が抜けていただけだったのですね! URIのnewメソッドのhostメソッドなので URI->new->host のように記述する方がわかりやすくてイイですね!

関連するQ&A