• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlのDigest::MD5;でのMD5算出が異なる)

perlのDigest::MD5でのMD5算出が異なる

このQ&Aのポイント
  • perlのDigest::MD5を使用して同じファイルでも異なるMD5が算出される理由について説明します
  • レンタルサーバ上とWindowsOS上で走らせた場合にも同じファイルでも異なるMD5が算出される現象について説明します
  • 問題の原因としては、ファイルの読み込みモードや改行コードの違いが関与している可能性があることを指摘します

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

  • ベストアンサー
  • yuuki0229
  • ベストアンサー率70% (33/47)
回答No.1

test.zipファイルを読み込む時にOSに応じた改行コード変換が行われていると思います。 それを抑制するために open my $fh, "<$file"; の後で binmode $fh; を行ってみてください。 バイナリファイルを操作する時はbinmodeが必要になります。

mei_1880
質問者

補足

まさに、おっしゃるとおりでした! 的確なアドバイスありがとうございます。 バージョンやファイル破損などほとんど関係ないところで 色々悩んでいたものが解決いたしました。 ここで、不思議に思うのですが、レンタルサーバ上でも、 通常のファイル読み込みやCGIは改行ありで解釈していると思うのですが、 何故、bindmodeを使わなくても、正常に算出できたのでしょうかね? もし分かりましたらこちらも教えいただけると幸いです。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

binmodeの働きは、 Linux/Unixのとき =>あってもなくても動作は同じ Windowsのとき =>binmodeだとそのまま入出力で、binmodeないと読み込み時CRを読み飛ばし、書き込み時LFをCR+LFに変換 です。

mei_1880
質問者

お礼

ありがとうございます。 とても参考になりました!

関連するQ&A