我正在寻找在Perl中获取文件校验和的方法,但不是通过执行系统命令cksum- 想在Perl本身中这样做,因为脚本需要在UNIX和Windows之间移植.cksum <FILENAME> | awk '{ print $1 }'适用于UNIX,但显然不适用于Windows.我已经探索过MD5但是看起来像获取文件句柄似乎是必要的,并且通常它似乎不是一种非常紧凑的方式来获取该数据(一线优选).
有没有更好的办法?
Mor*_*kus 13
根据您提供的模块,有三种不同的方式:
use Digest::MD5 qw(md5_hex);
use File::Slurp;
print md5_hex(read_file("filename")), "\n";
use IO::All;
print md5_hex(io("filename")->all), "\n";
use IO::File;
print md5_hex(do { local $/; IO::File->new("filename")->getline }), "\n";
Run Code Online (Sandbox Code Playgroud)
不是完全一线但非常接近.
替换Digest::MD5为您想要的任何哈希算法,例如SHA1.
IO::File是核心,应该随处可用,但这是我个人最不喜欢的解决方案.无论如何,它的工作原理.
我无法在Windows中为我做任何上述工作,我总是得到一个不正确的MD5.我怀疑它是由于linebreak的差异引起的,但将文件转换为DOS或unix没有任何区别.具有相同文件的相同代码将在linux上给出正确的答案,在Windows中给出错误的答案.阅读文档,我终于发现了一些可以在windows和linux中运行的东西:
use Digest::MD5;
open ($fh, '<myfile.txt');
binmode ($fh);
print Digest::MD5->new->addfile($fh)->hexdigest;
Run Code Online (Sandbox Code Playgroud)
我希望这有助于其他人在Windows中遇到困难,我觉得很奇怪,我没有找到任何关于Windows上的问题的提及......
| 归档时间: |
|
| 查看次数: |
12486 次 |
| 最近记录: |