尝试将版本号与多个点进行比较,我想知道该怎么做:
Perl 有一个version模块似乎可以完成这项工作,但我想知道:
DB<1> use version
DB<2> x '1.2.3' > '1.2.29'
0 ''
DB<3> x '1.2.3' >= '1.2.29'
0 1
DB<4> x '1.2.3' cmp '1.2.29'
0 1
DB<5> x '1.2.3' cmp '1.2.29'
0 1
DB<6> x qv(1.2.3)
0 v1.2.3
DB<7> x qv(1.2.3) > qv(1.2.29)
0 ''
DB<8> x qv(1.2.3) < qv(1.2.29)
0 1
DB<9> x '1.2.3' == '1.2.29'
0 1
DB<10> x v1.2.3
0 "\cA\cB\cC"
DB<11> print v1.2.3
DB<12> print qv(1.2.3)
v1.2.3
Run Code Online (Sandbox Code Playgroud)
Soqv(1.2.3)被转换为v1.2.3,但是当我打印时v1.2.3,它被转换为三个二进制字节(“\cA\cB\cC”)。为什么不x qv(1.2.3)打印二进制字符串,以及如何3.17.34正确比较版本字符串?
使用的 Perl 是 5.18.2(以防有所不同)。
当我在调试真实程序时尝试它时,我得到了不同的输出:
DB<2> x qv(1.2.3)
0 version=HASH(0x2faee10)
'original' => 'v1.2.3'
'qv' => 1
'version' => ARRAY(0x2faf3f8)
0 1
1 2
2 3
DB<3> print qv(1.2.3)
v1.2.3
Run Code Online (Sandbox Code Playgroud)
现在我完全困惑了。
v1.2.3和qv(1.2.3)under和有什么不一样use version?
v1.2.3创建与 相同的字符串chr(1).chr(2).chr(3)。[1]与版本模块无关。
qv创建一个“version”类的对象。
如何正确比较 3.17.34 等版本字符串?
要比较版本字符串,首先创建版本对象。qv已弃用,version->declare应改用。
version->declare( "v1.2.3" )
version->declare( "1.2.3" )
version->declare( v1.2.3 )
Run Code Online (Sandbox Code Playgroud)
然后使用数值比较运算符 ( ==, !=, <, >, <=, >=, <=>) 进行比较。
version->declare( '1.2.3' ) > version->declare( '1.2.29' )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |