- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Perl ファイル一気読み後の正規表現について)
Perlでファイル一気読み後の正規表現で問題が発生しています
このQ&Aのポイント
- Perlでファイル一気読み後に正規表現を当てる際、一部の箇所ではうまくいかない問題が発生しています。
- ファイルの先頭の方では正規表現が正常に動作する一方、後半の箇所では正規表現がマッチしないことがあります。
- 問題の原因や他の解決方法について、ご存知の方は教えていただけないでしょうか。PC環境はWindows 7で、Perlのバージョンは5.12です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
参考までに、ideoneでの実行; http://www.ideone.com/lziei 質問文の例は普通に動いてるので、SJIS変換してるあたりに原因があるかも。ないかも。
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.3
確認ですが, この例で 1行ずつ処理したときには想定した通りの結果になっている のですね?
質問者
補足
ご質問頂きありがとうございます。 はい while(<>) で処理した場合は想定通りの結果になります。 ただ一点補足がございます。 上記の質問では、関連は薄いと思いあえて記載しなかったんですが、 このhtmlファイルはSjisテキストで、それをSjis.pmを使って処理を行おうとしています。 通常のエンコードした場合で試していなかったので ちょっと後で試してみようと思います。
- axel_eye
- ベストアンサー率64% (145/226)
回答No.2
open IN , "test.html"; my $data; { local $/ = undef; $data = <IN>; } close IN; でスコープに入れてはどうでしょう。$/ undefしたままで他の処理を行おうとすると予期せぬ結果になるかもしれません。
質問者
お礼
ご回答頂きありがとうございます。 スコープ試してみて結果は変わらなかったんですが、 そもそもスコープに入れる発想が無かったので勉強になりました。 ありがとうございました。
- osamuy
- ベストアンサー率42% (1231/2878)
回答No.1
td? dt?
質問者
補足
大変失礼しました。 正規表現中の "td" は "dt" の間違いです。 ご指摘頂きありがとうございました。
お礼
お礼遅くなり申し訳ございません。 ご確認頂きありがとうございました。 (ideone.com 知りませんでした、こんなサイトがあるんですね) ちょっと時間がとれなくて細かい検証はできていないんですが、 仰る通りどうやらSjis.pmが悪さしていたようです。