“使用版本”下的“v1.2.3”和“qv(1.2.3)”有什么区别?

U. *_*ndl 3 perl version

尝试将版本号与多个点进行比较,我想知道该怎么做:

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)

现在我完全困惑了。

ike*_*ami 6

v1.2.3qv(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)
  1. 几乎。由 v 文字创建的标量具有附加的魔力,将其标识为这样的标量。