Perl比较运算符和字符串化的"数字"

sno*_*kin 10 string perl comparison numbers operators

我最近和perl一起工作了很多,但我还不知道怎么样<,>,>=,=<, ne,gt等等...字符串化的"数字","数字"我的意思是:'1.4.5.6.7.8.0'

纠正我如果我错了,以下返回true:

if ('1.4.5' > '8.7.8');
Run Code Online (Sandbox Code Playgroud)

因为两者都将被强制为真(不是空字符串).但是,ne,gt等字符串运算符如何处理这些数字呢?

基本上我正在尝试比较由以下形式组成的版本号:

1.3.4.0.2
Run Code Online (Sandbox Code Playgroud)

我可以对每个数字进行数字比较,但在此之前,我想知道比较运算符对这些字符串执行的字符串.

谢谢,

Seb*_*mpf 18

第一:请use warnings一直.你会立刻意识到以下几点:

$ perl -wle 'print 1 unless "1.4.5" > "8.7.8"'
Argument "8.7.8" isn't numeric in numeric gt (>) at -e line 1.
Argument "1.4.5" isn't numeric in numeric gt (>) at -e line 1.
Run Code Online (Sandbox Code Playgroud)

Perl v5.9.0随版本一起发布.这个模块可以很容易地比较版本号:

use warnings;
use version;

my ($small, $large) =  (version->parse('1.4.5'), version->parse('8.7.8'));

print "larger\n"    if $small > $large;
print "smaller\n"   if $small < $large;
Run Code Online (Sandbox Code Playgroud)


Mat*_*teo 8

字符串比较仅在点之间的每个数字具有相同长度时才有效.字符串比较不知道数字,并将开始比较点和数字(因为它们都是字符串中的字符).

有一个CPAN模块可以完全满足您的需求:Sort :: Versions