Вы сравниваете строки, а не числа, поэтому используйте eq
.
Также используйте lc()
и chomp()
или $a=~s/^\s+//;$a=~s/\s+$//;
.
У вас есть довольно неплохая опция преобразования входных данных в числа с hex()
и использованием ==
.
Попробуйте:
if (hex($a) == hex($b)){}
Все зависит от того, насколько хорошо вы обрабатываете вывод вашей команды md5sum
. Моя выглядит так:
dlamblin$ md5 .bash_history
MD5 (.bash_history) = 61a4c02cbd94ad8604874dda16bdd0d6
Итак, я обрабатываю это так:
dlamblin$ perl -e '$a=`md5 .bash_history`;$a=~s/^.*= |\s+$//g;print $a,"\n";'
61a4c02cbd94ad8604874dda16bdd0d6
Теперь я заметил, что hex()
имеет целочисленную ошибку переполнения, поэтому вам нужно use bigint;
dlamblin$ perl -e '
$a=`md5 .bash_history`;$a=~s/^.*= |\s+$//g;print hex($a),"\n";'
Integer overflow in hexadecimal number at -e line 1.
1.29790550043292e+38
dlamblin$ perl -Mbigint -e '
$a=`md5 .bash_history`;$a=~s/^.*= |\s+$//g;print hex($a),"\n";'
129790550043292010470229278762995667158