- ベストアンサー
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となっているのです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
単に、 new URI( 'http://www.goo.ne.jp/' ) ――みたいにすればよいのでは。
その他の回答 (2)
- _--_--_-_-
- ベストアンサー率47% (8/17)
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 メソッドが呼び出し可能かどうか調べるという方法が考えられます。
お礼
詳しい解説をありがとうございます。 プロトコルつきのURLを渡さないとhostメソッドが失敗してしまうのですね! インテリジェントなコード例もありがとうございます。 canの使い方を覚えました。 今後役に立つことでしょう。
- jjon-com
- ベストアンサー率61% (1599/2592)
引数としてどんな形式のデータを渡せばよいかはリファレンスマニュアルに例示されています。 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 でも,お好きなようにどうぞ。
お礼
ありがとうございます! プロトコルの指定が抜けていただけだったのですね! URIのnewメソッドのhostメソッドなので URI->new->host のように記述する方がわかりやすくてイイですね!
お礼
ありがとうございます。 これはしたり! サーバー名だけではダメだったのですね! 頭にhttp://をつけたらできました!!