Подтверждение шестнадцатеричного MD5 с помощью строки - PullRequest
0 голосов
/ 22 октября 2018

У меня возникла проблема при сравнении результата из подпрограммы 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";
   }
 }
}

В файле журнала я вижу, что 2 значения $md5 и $hash одинаковы или различны (в зависимости от моделируемого случая), но когда я проверяю, программа видит их как всегда равные,Я думаю, что могут быть проблемы с типами данных, но я не знаю, как это исправить.

1 Ответ

0 голосов
/ 22 октября 2018

use strict для обнаружения ошибок с именами переменных и областями действия.$ hash не определен в if( $md5 eq $hash ), поскольку my $hash = <$fh>; находится вне области видимости.Объявите my $hash перед while (my $row = <$fh>) и установите значение с помощью $hash = <$fh>;

http://perldoc.perl.org/functions/my.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...