将file_md5_hex( $dir )
子例程的结果与从文件读取的字符串进行比较时遇到问题。
当我打印时它们是相同的,但是当我比较它们时,无论它们具有什么值,我都得到相等的时间。
elsif ( -f $dir )
{
if($dir ne "$mydir.txt" && $dir ne "log.txt")
{
my $filename = "$mydir.txt";
open(my $fh, '<:encoding(UTF-8)', $filename)
or die "Could not open file '$filename' $!";
print FILE "$dir -> ";
while (my $row = <$fh>)
{
chomp($row);
if($row eq $dir)
{
my $hash = <$fh>;
chomp($hash);
print FILE "$hash = ";
break;
}
}
close $fh;
my $md5 = file_md5_hex( $dir );
print FILE "$md5\n";
print FILE ref($md5);
print FILE ref($hash);
if( $md5 eq $hash )
{
print FILE "Hash ok!\n";
}
else
{
print FILERESULT "In $mydir file $dir is corrupted. Correct is $hash, calculated is $md5\n";
print FILE "Hash Nok!\n";
}
}
}
在日志文件中,我看到两个值$md5
和$hash
相同或不同(取决于我模拟的情况),但是当我验证程序时,它们会始终相等。我认为数据类型可能存在问题,但我不知道如何解决。
答案 0 :(得分:2)
use strict
来检测具有变量名和范围的错误。
未在if( $md5 eq $hash )
上定义$ hash,因为my $hash = <$fh>;
在范围之外。
在my $hash
之前声明while (my $row = <$fh>)
,并用$hash = <$fh>;