使用perl md5比较两个文件

Dex*_*ers 3 perl md5 file-comparison

我想运行一个代码,如果文件存在则继续检查文件是否退出,然后检查文件的MD5与之前的MD5.如果有一些变化,那么它会执行一些代码.但是每次我为同一个文件调用hexdigest时,perl MD%似乎都在变化.MD5每次都会改变吗?

我最初有

$md5 = Digest::MD5->new; 
Run Code Online (Sandbox Code Playgroud)

之前 while(1)

如果不是这样做,还有什么可以实现我的意图吗?谢谢

while(1)
{
    if(!(-e $config_file)){
            next;
    }else{
            $md5 = Digest::MD5->new;
            $md5->addpath($config_file);
            print "<->";
            print $md5->hexdigest;

            $value=($digest eq $md5->hexdigest ? 1 : 0);
            if($value==1)
            {
                    next;
            }else
            {
                    $digest=$md5->hexdigest;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jim*_*son 8

hexdigest操作是一次性读取,这意味着在执行后,该值将被重置.它只能读取一次,但您尝试读取两次.第一次阅读时将其存储在临时状态.

文档(我的重点):

$ MD5->消化

返回消息的二进制摘要.返回的字符串长度为16个字节.

请注意,摘要操作实际上是一种破坏性的一次性操作.一旦执行,Digest :: MD5对象将自动重置,并可用于计算另一个摘要值.如果要在不重置摘要状态的情况下计算摘要,请调用$ md5-> clone-> digest.

$ MD5-> hexdigest

与$ md5-> digest相同,但将以十六进制形式返回摘要.返回字符串的长度为32,并且只包含此集合中的字符:'0'..'9'和'a'..'f'.