プロが教えるわが家の防犯対策術!

csvファイルが存在するかどうか確認するためif節でheadを使っています
$data_hokkaido = "http://denkiyoho.hepco.co.jp/data/juyo_hokkaidou …
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 …
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);
}
ではエラーは出ません

理由がお分かりの方ぜひ教えてください。
よろしくお願いします。

A 回答 (1件)

関西電力の方でエラーが出ないというのは間違いですね。

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

ありがとうございます。
use LWP::Simple;はgetにだけ必要とばかり思っておりました

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

お礼日時:2012/07/28 19:54

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