• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:WWW::Mechanizeを使っておられる方、又は使える方に質問です。)

WWW::Mechanizeを使ってURLを読み込んでリンクを辿るコードの挙動

このQ&Aのポイント
  • WWW::Mechanizeを使っておられる方、又は使える方に質問です。WWW::Mechanizeを使っている方、使える方にお聞きしたいです。下記のような適当なURLを読み込んでそのリンクを辿るコードを書きました。リンクが見つからなかった場合のチェックが正常に働くかの確認ため、15行目でわざと存在しないlinkを指定してみました。16行目で止まって欲しいのですが、止まりません。最終行の様にすると止まります。この振舞いは私だけでしょうか?もしお手持ちの環境でMechanizeが使える方、試せる方がおられましたら結果を教えて頂けたら幸です。
  • 1つ気になっているのは、installのmeke testの段階で、以下に関しエラーが出てはおりました。t/live/follow.t t/live/follow_link.t t/live/get.t t/local/back.t私の環境はRHL9,perl, v5.8.0gcc 3.2.2です。
  • コードの15行目では存在しないリンクを指定しているにも関わらず、振舞いが正常に動いておりません。振舞いの確認ができる環境をお持ちの方は結果を教えて頂きたいです。また、installのmeke testの段階でエラーが出ているという報告もあります。環境による影響があるのかもしれません。

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

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

$mech->successは >最後のリクエストが成功したか否かをtrue(1)かfalse(0)で返します。 とのことなので、 $mech->follow_linkで、そのページにリンクが見つからなければ、 (新たなリクエストは行われないので) 最後のリクエストは、www.yahoo.co.jpへのリクエスト、 ゆえに1が返ってくる。

noname#9431
質問者

お礼

ご回答ありがとうございます! 私も質問した後、この振舞いを説明できるとしたら、仰るように振舞うしかないよなあと思っていたので、それが確認できて安心しました。 find_link()メソッドはリンクが見つからなければundefを返すという説明がmanにされていたので、 successメソッドもfaulseになるものと思いこんでいたのが間違いだったのですね。 だから、サイトの変更に対してよりsecureなコードとして、本来なら、 $mech->find_link(...)) or die ... $mech->success() or die .... と二重にチェックするべきですね。 少々マニアックな質問だったので、回答が頂けないのではないかと心配しておりました。 ありがとうございました。

関連するQ&A