• ベストアンサー

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

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • 関数が使えない

    関数が使えない状態になっており、困っています。 メッセージは下記が出ています。 Can't locate object method "%s" via package "%s" そのパッケージにも、基底クラスにも、該当のメソッドが定義されていないとうことのようですが、 使おうとしている関数が所属しているパッケージを、しっかりとuse しています。 また、「perlobj manpage」というページに情報があるらしいというのを情報として得たのですが、↓ http://fleur.hio.jp/perldoc/mix/pod/perlobj.html 「Can't locate object method」ということに関係している箇所みつからず、また、ここに書かれている内容は難しく情報があまり得られませんでした。 宜しくお願いいたします。

    • ベストアンサー
    • Perl
  • Jcode.pmについて

    ネット上からダウンロードしてきたCGIプログラム内で、Jcode.pmを使用しているようなのですが、サーバ にUpしたところ、以下の様なエラーが表示されました。 ※1 Can't locate Jcode.pm in @INC (@INC contains: /usr/lib/perl5/5.6.1/i386-linux /usr/lib/perl5/5.6.1 /usr/lib/perl5/site_perl/5.6.1/i386-linux /usr/lib/perl5/site_perl/5.6.1 /usr/lib/perl5/site_perl .) at access/accview.cgi line 68. ※2 BEGIN failed--compilation aborted at access/accview.cgi line 68. ちなみに、accview.cgi line 68には use Jcode; と書かれていました。 エラーの原因として、何がありますか? また、その解決法を教えていただきたいです。

    • ベストアンサー
    • Perl
  • Can't locate R.pm in @INC

    perl初心者でまた質問させていただきます。 CGIを作っているのですが、R.PMが使えなくて困っています。 USE R; とすると、以下のようなエラーが出てしまいます。 Can't locate R.pm in @INC (@INC contains: /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/5.10.0 /usr/lib/perl5/site_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.10.0 /usr/lib/perl5/vendor_perl/5.10.0/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.10.0 /usr/lib/perl5/vendor_perl .) at /srv/www/htdocs/cgi/ringo.cgi line 5. BEGIN failed--compilation aborted at /srv/www/htdocs/cgi/ringo.cgi line 5. Premature end of script headers: ringo.cgi そこで、 locate R.pm で、場所を探しました。 /usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/R.pm ということで、 use R '/usr/lib/perl5/5.10.0/x86_64-linux-thread-multi/'; このように変えてみたものの、同じエラーです。ちなみに、CGIではなく、PERLのプログラムからだと、use R;で動作することは確認しました。 よろしくお願いします。

    • 締切済み
    • CGI
  • Jcode CP932 のエラーを回避したい。

    プログラム初心者です。 form Mailを設置し、フォーム入力→確認画面までは動くのですが、 最後に、送信ボタンを押すと、500エラーになります。 お手上げです。詳しい方お教えください。 サーバーのエラーログをみたところ、 Can't locate object method "CP932" via package "Jcode" at form_mail.cgi となっていました。 ━━ #!/usr/bin/perl require 'jcode.pl'; $sendmail = '/usr/sbin/sendmail'; use Jcode; ━━ エラーと思われる箇所 sub jis { $msg = $_[0]; # Jcode::convert(*msg,'jis'); $msg = Jcode->new($msg, "UTF8")->CP932; &jcode'convert(*msg,'jis'); } ━━

  • HTML::Embperlが使えない!

    HTML::Embperlをインストールしてプログラムを作成したのですがエラーになってしまうのです! OSはRed Hat Linux 8で Perlはv5.8.0 built for i386-linux-thread-multiで HTML::EmbperlはHTML-Embperl-1.2b4-2.i386.rpmです。 原因を特定するために次のとおり、いたって単純なプログラムを作成しました。 #!/usr/bin/perl -w use strict; use HTML::Embperl; これを実行すると Can't locate loadable object for module HTML::Embperl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-t hread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at ./try line 3 Compilation failed in require at ./try line 3. BEGIN failed--compilation aborted at ./try line 3. のように長々とエラーメッセージが出てしまいます。 $ ls -l /usr/lib/perl5/site_perl/HTML/Embperl.pm -r--r--r-- 1 root root 39448 2月 15 1999 /usr/lib/perl5/site_perl/HTML/Embperl.pm HTML::Embperlのインストール自体は成功していると思うのですが・・・ 誰か、他に何をチェックすればいいか教えてください~

    • ベストアンサー
    • Perl
  • FreeBSD 4.6.2にDBD::mysqlがインストールされません

    FreeBSD 4.6.2-RELEASEを利用しており、perlモジュールのDBD::mysqlをインストールしたいのですが、make installまで終えても、実際にバージョンを表示させてみると表示されず、mysqlhotcopyを実行してもやはり、DBD::mysqlが入っていませんというエラーが出ます。 DBD::mysql initialisation failed: Can't locate object method "driver" via package "DBD::mysql" (perhaps you forgot to load "DBD::mysql"?) at /usr/local/lib/perl5/site_perl/5.6.2/i386-freebsd/DBI.pm line 729. Perhaps the capitalisation of DBD 'mysql' isn't right. at /usr/local/mysql/bin/mysqlhotcopy line 164 DBD::mysqlはソース(tgz)からのインストールです。 バージョンはDBD-mysql-2.1028です。 お分かりの点がありましたらご指摘をお願い致します。

    • ベストアンサー
    • Perl
  • ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません

    ブラウザ上からなら実行可能なスクリプトがコマンドラインだと実行しません windowXP, perl5 で開発しています。 簡単なプログラム(test.pl)なのですが ----- #!/usr/bin/perl use IO:Socket メール送信処理 1; ----- ブラウザ上から実行すると正しくメール送信されますが、 これをコマンドプロンプトから ----- perl test.pl ----- とすると、 Can't locate IO/Socket.pm と出てしまいます。 pathが通ってないとか絶対パスとかそのあたりかと思い、 socket.pmのあるパスを通したりしましたが、変化しません。 use IO::Socket を絶対パスとかで指定するのでしょうか? 解決方法をお教え頂ければと思います。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • SOAP::Liteを利用したい!

    Linux上でPerlを用いて use SOAP::Lite .... というプログラムを書いたのですが、 これを実行させると Can't locate SOAP/Lite.pm in @INC(@INC contains : /usr/local/lib/perl5/5.8.5/i686-linux.... SOAP/Lite.pmが含まれていないというエラーメッセージが表示されます。 現在使っているPerlのバージョンが5.8.5であり、SOAP/Lite.pmがないみたいです。 このコンピュータには5.005のバージョンがあり、ここには、 SOAP/Lite.pmが /usr/lib/perl5/site-perl/5.005/Apache/ /usr/lib/perl5/site-perl/5.005/XMLRPC/ の下にあります。 5.8.5のバージョンで、設定を変えてこれを利用したいと思っているのですが、設定の変え方がわかりません。どのような方法がありますか?教えてください。

    • ベストアンサー
    • Perl
  • windowsでperlDBI+postgreSQL

    windowsでperlDBI+postgreSQLに挑戦しています。 今perl上からpostgreSQLに接続しようとしたところ エラーが出て接続できませんでした。 エラー内容は Can't locate DBI.pm in@INC というものでした。 いろいろ調べたのですがDBIモジュールがないのかな?と思い、 ネットでDBI-1.48というファイルを落としてきました。 解凍してみたのですが、今度はこれをどうインストールしてよいのかわからず 詰まってしまいました。 ちなみにエラーがでたperlの中身は *********************************************** #!/usr/bin/perl use DBI; # DBI モジュールを使えるようにします。 # 環境に応じて、各種情報をセットしておいてください。 $dbname = "template1"; $host = "127.0.0.1"; $user = "test"; $password = "pass"; $table = "testtable"; # データベースへの接続。ここで、Pg という名前の DBD を指定しています。 $conn = DBI->connect("dbi:Pg:dbname=$dbname;host=$host", $user, $password ); *********************************************** となってます。 助言をいただけませんでしょうか

    • ベストアンサー
    • Perl
  • No.616076に続けて質問です

    jcode.plを読み込みたく、 #!/usr/bin/perl require './jcode.pl'; としたところ、 Can't locate ./jcode.pl…というエラーが起きました。 どのような原因が考えられますでしょうか?

    • ベストアンサー
    • Perl