我正在尝试比较文件的校验和值。一个变量$a具有校验和(md5sum命令的输出,只有十六进制部分)并且相同的值在变量中$b。
如果我这样做 ( $a == $b),我会收到一个错误,但如果我这样做,($a eq $b)它会给出不相等的结果。
感谢您的回答,它在修剪空格后在字符串比较中起作用,尽管使用 chomp 不起作用。
您正在比较字符串,而不是数字,因此请使用eq.
也使用lc(), 和chomp()或$a=~s/^\s+//;$a=~s/\s+$//;。
您确实有相当不错的选择,可以将输入转换为数字hex()并使用==. 尝试:
if (hex($a) == hex($b)){}
Run Code Online (Sandbox Code Playgroud)
这一切都取决于您处理md5sum命令输出的程度。我的看起来像这样:
dlamblin$ md5 .bash_history
MD5 (.bash_history) = 61a4c02cbd94ad8604874dda16bdd0d6
Run Code Online (Sandbox Code Playgroud)
所以我用这个处理它:
dlamblin$ perl -e '$a=`md5 .bash_history`;$a=~s/^.*= |\s+$//g;print $a,"\n";'
61a4c02cbd94ad8604874dda16bdd0d6
Run Code Online (Sandbox Code Playgroud)
现在我确实注意到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
Run Code Online (Sandbox Code Playgroud)