Perlチェックでエラーが出て困ってます

このQ&Aのポイント
  • 質問者は、Perlチェックでエラーが発生している状況に困っています。具体的には、csvファイルの存在を確認するためにif節とheadを使用していますが、警告が表示されています。
  • 質問者は、if節を除外するとエラーが発生せずにデータを取得できることを確認しています。しかし、headに何が問題があるのか具体的にはわかっていません。また、同じ方法で他のcsvファイル(関西電力)を取得する場合はエラーが発生しないことを指摘しています。
  • 質問者は、問題が発生しているのは北海道電力のデータであり、他の電力会社のデータは正常に取得できることを説明しています。具体的な理由を知りたいとしています。
回答を見る
  • ベストアンサー

perlチェックでエラーが出て困ってます

csvファイルが存在するかどうか確認するためif節でheadを使っています $data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou.csv"; if (head "$data_hokkaido" ){ use LWP::Simple; $content = get($data_hokkaido); } こうするとエラーになるのでperlチェックをしてみたところ String found where operator expected at test.cgi line 393, near "head "$data_hokkaido"" (Do you need to predeclare head?) と警告が出ました if節を外して $data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou.csv"; use LWP::Simple; $content = get($data_hokkaido); とするとエラーは出ず、問題なくデータ取得できるので、headに原因があるのだと思いますが、具体的に何が悪いのでしょうか? ちなみに何のデータを取得しているかと言いますと、電力各社の電気予報のデータで、 エラーが出るのは北海道電力ので、同じようにファイルがダウンロードされる形式になっている関西電力部分 $data_kansai = "http://www.kepco.co.jp/yamasou/juyo1_kansai.csv"; if (head "$data_kansai" ){ use LWP::Simple; $content = get($data_kansai); } ではエラーは出ません 理由がお分かりの方ぜひ教えてください。 よろしくお願いします。

  • choei
  • お礼率63% (286/451)
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

関西電力の方でエラーが出ないというのは間違いですね。それだけ抜き出して 試してみてください。同じエラーになると思います。 で、何が問題かというと、LWP::Simpleモジュールを読み込む前に、そこで定義されている head関数を使っていることです。use文をファイル冒頭に移動すれば問題ないと思います。

choei
質問者

お礼

ありがとうございます。 use LWP::Simple;はgetにだけ必要とばかり思っておりました それで、北電と関電以外もデータを取っていたのですが、北海道電力の次に東北電力のデータを取っており、そこだけif節を入れるのを忘れていて、そこでuse LWP::Simple;を記述しており、その後に関西電力があったので、その記述が有効だったため関西電力の方ではエラーにならなかったようです 勉強になりました

関連するQ&A

  • 他のサーバーにあるファイルの存在確認をしたい

    データを取得するため、他のサーバーにあるファイルの存在確認をしたいのですが、どのようにすればいいでしょうか? ファイルは普通に公開されているファイルです 他の方の質問の回答にもあった if(head "$data"){ use LWP::Simple; $content = get($data); } #$dataは別行でURLを指定してます という方法を試したのですがわざと存在しないファイル名を指定したところtrueが返り、ifの中に入っていって存在しないファイルを取得しようとしてgetでエラーになってしまいましたし、存在するファイル名を指定してみてもやはりifの中に入ってそのままデータの取得ができました (ファイルが存在するしないにかかわらずif分岐がtrueになりました) 他に if(-e "$data"){ use LWP::Simple; $content = get($data); } #$dataは別行でURLを指定してます とやってみましたがこれは逆に存在するファイル名をしていても全てifの中に入っていかずfalseが返ってきました なお、確認したいファイルはcsvです

  • LWPモジュールについて教えてください。

    プログラミングは初心者です。 LWPモジュールのサブクラスLWP::Simpleの get()という関数を使いたいです。 現在、Perlは5.005_3を使用しています。 use LWP::Simple; require LWP::Simple; ・ get(URL) と入れると、500 Internal Server Errorと言うものが出てしまいます。 LWPを使うとき、どのようにすれば使えるのかご指導お願いいたします。

    • ベストアンサー
    • Perl
  • Perl LWPでproxyがうまく刺さらない

    Perl初心者です。 LWPでどうしてもproxyが通りません・・・。 何が悪いのかわかりません。教えてください。 モジュールは全て導入を確認しました。 よろしくお願いします。 稚拙なミスだったらごめんなさい。 use LWP::Simple; use LWP::UserAgent; use HTTP::Request::Common; my $ua = LWP::UserAgent->new( timeout=>"5" ); #cybersyndromeさんからLWP::Simpleでproxyを取得 $_ = get('http://www.cybersyndrome.net/pla5.html'); #proxyをリストに代入 (@proxy_list)=/\"\>(.*?)\<\/a\>\<\/li\>\<li\>/g; #適当なサイトをリクエストのターゲットに $r = new HTTP::Request GET,('http://taruo.net/e/'); #前述のターゲットへリクエストしてひとつづつproxyが通るか確かめたいのに何故かすべてすぐにERRORに for($i = 0;$i <= 10;$i++){ $proxy = 'http://'.$proxy_list[$i]; $ua->proxy ([qw(http https)] , $proxy); $req = $ua->request($r); if ($req->is_success) { print "Success!\n"; }else{ print "Error\n"; } }

    • ベストアンサー
    • Perl
  • LWPでHTMLが取得できないことがある

    LWPを使ってHTMLを取得しようとしているのですが、取得可能のサイト、不可能のサイトがあります。 たとえばyahooのトップページは取得できますが、wikipediaは取得できません。取得できない場合、エラーメッセージは出ません。 このようになる理由を教えてください。 よろしくお願いいたします。 環境:windowsXP & ActivePerl、またはwindowsXP & cygwin コード: #wikipediaのトップページHTMLを取得する use LWP::Simple; $site = get "http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8"; print $site; #yahooのトップページHTMLを取得する use LWP::Simple; $site = get "http://www.yahoo.co.jp/"; print $site;

    • ベストアンサー
    • Perl
  • LWP::simpleがiswebで使えない

    use LWP::Simple; print (get("http://www.yahoo.co.jp/")); このように使っていたのですが、iswebにアップロードしたところ、ダウンロード出来ずに使えなくなりました。 iswebでは使えないようです。 なので、これの代わりになる方法を探しているのですが、何かありますか? Webページのソースを取得するだけでいいです。 なにかあるでしょうか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • LWPによるページ取得の問題

    すいません、アホです。いろいろ調べましたが、まったくみつかりませんでした。この質問をすることは初歩すぎて失礼かとおもいますが、堪忍してくださいませ。 LWPで相互リンクをされているかどうかをCGIファイルの登録ページ後に判断したいプログラムですが、同じCGIファイル内に登録ページがありまして、<INPUT size=30 name=url>のように相手リンクを登録した自分のHTMLを書いてsubmitさせて、 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } で、取り出し、$FORM{'url'}まできます。URLがちゃんと$FORM{'url'}に入っているのは画面で確認できるのですが、下記のように指定した場合、相手HTMLを取得できません。エラーメッセージはでないで、真っ白い画面がでます。 $url = $FORM{'url'}; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; 下記はちゃんとうつります。 $url = 'http://www.yahoo.co.jp'; use LWP::Simple; $content = get("$url"); print "Content-type: text/html\n\n$content"; これは$FORM{'url'}のエンコードの問題なのでしょうか? まことに申し訳ありませんが、その方法をできれば具体的にお教えくださいませ。 何卒、宜しく御願いいたします。m_ _ m

  • perlのLWPがページによって、正常に作動しません?

    下記コードを書いたのですが、ページのソースを取得することができません。 どのように変えれば、取得することができますでしょうか? 因みに、URL部分を、 http://www.amazon.co.jp/gp/product/B000H9I0F6 とした場合は正常に取得できました。 お分かりになる方、何卒、宜しくお願い致します。 #!/usr/bin/perl print "Content-Type: text/plain\n\n"; use LWP; use HTTP::Cookies; $url="http://www.amazon.co.jp/gp/product/B000GPEXX4"; $file="cookies.txt"; $browser = LWP::UserAgent->new; $browser->cookie_jar({file =>$file, autosave=>1 }); $response = $browser->get($url); print $response->{_content}; exit;

    • ベストアンサー
    • CGI
  • ホームページの更新日時の取得

    use LWP::Simple; ($content_type, $document_length, $modified_time, $expires, $server) = head $url; とすると,$modified_timeに$urlのアドレスのWebページの更新日時が 得られるとあったのですが,何も値が取得できないのはなぜでしょうか. $expiresにだけ NCSA/1.3という値が入っていました.

    • ベストアンサー
    • Perl
  • Perl HTMLソースから特定のタグ抽出

    use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'https://www.yahoo.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; $proxy->agent('your own created browser name here'); # 任意 $proxy->timeout(60); # 任意 my $req = HTTP::Request->new('GET' => $URL); my $res = $proxy->request($req); my $content = $res->content; print "Content-Type: text/html\n\n"; # HTML ヘッダ (CGI として動作できる) if($res->is_success) { print $content; } else { print 'HTTP エラーコード: ' . $res->code; } これで、HTMLソース全てを取得することはできましたが、 例えば、このソースはヤフーのコードを取得していますが、 ヤフーのコード内で<li></li> リストタグないの文字列がほしいのですが、 どのように抽出すればいいのでしょうか? ヤフーでは、下記のようになっていて <li><a hrf="???????????????">ここの文字列<span>写真</span><span>new</span></li> このソースからここの文字列を抽出させたいです。 さらに、1番目の<li>内、4番目の<li>内といったことも実行したいです。 どうかご教示お願い致します。

  • Perlでgoogle newsのRSSを取得2

    質問を閉め切った直後に気付いたもので、すいません!! QNo.3797932の、つづきなのですが、、、 教えていただいた以下の方法 ------------------------- #!/usr/local/bin/perl use LWP::Simple; use XML::RSS; use LWP::UserAgent; my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko'; my $ua = new LWP::UserAgent; my $responce = $ua->get($url, 'User-Agent' => 'Mozilla/4.0'); my $data_from_web = $responce->content; print <<"HTML"; Content-type: text/html <html> HTML print $data_from_web; exit; ------------------------- の場合だと、ページ表示データは取得できるのですが、RSS特有のタグが 抜け落ちる為、その後の解析ができない事に気付きました。 なんとか、RSS特有のタグも含めてのRSS情報を入手する方法はないでしょうか? ちなみに、RSS特有のタグも含めてのRSS情報は、ブラウザーのURLの窓に http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=aiko このアドレスを直接入力してリターンキーを押すと、確認する事ができます。 度々申し訳ないのですが、よろしくご指導、お願い致します。

    • ベストアンサー
    • Perl

専門家に質問してみよう