您正在从Perl 5.39.5查看此文档的版本。这是Perl的开发版本。

目录

名称

version—版本对象的Perl扩展

简介

#正在分析版本字符串(十进制或点十进制)使用版本0.77;#获取最新的错误代码和API$ver=版本->解析($string)#声明dotted-decimal$VERSION(保持在一行!)使用版本;我们的$VERSION=VERSION->declare(“v1.2.3”);#正式的使用版本;我们的$VERSION=qv(“v1.2.3”);#已弃用使用版本;我们的$VERSION=qv(“v1.2_3”);#已弃用#声明旧式十进制$VERSION(使用引号!)我们的$VERSION=“1.0203”;#推荐使用版本;我们的$VERSION=VERSION->parse(“1.0203”);#正式的使用版本;我们的$VERSION=版本->解析(“1.02_03”);#阿尔法#比较混合版本样式(小数、点小数、对象)if(version->parse($v1)==version->parse($v2)){#做一些事情}#排序混合版本样式@有序=排序{版本->解析($a)<=>version->parse($b)}@list;

描述

版本对象是在5.10中添加到Perl的。该模块实现旧版本Perl的版本对象,并为所有版本的Perl提供版本对象API。0.74之前的所有早期版本都已弃用,由于API更改不兼容,因此不应使用。版本0.77引入了新的“parse”和“declare”方法来标准化使用。强烈建议您在代码中设置最小值0.77,例如。

使用版本0.77;#即使对于Perl v.5.10.0

版本对象的类型

有两种不同类型的版本对象,对应于正在使用的两种不同样式的版本:

十进制版本

经典的浮点数$VERSION。这种风格的优点是不需要做任何特殊的事情,只需在源文件中键入一个数字即可。建议使用引号,因为它可以确保在任何警告或其他输出中保留尾随的零(“1.50”)。

点十进制版本

更现代的版本分配形式,用小数点分隔3个(或更多)整数(例如v1.2.3)。这是自5.6.0发布以来Perl本身使用的形式。现在强烈建议使用前导的“v”,以清楚起见,如果省略,将在以后的版本中引发警告。需要前导“v”字符来传递“is_strict()”测试。

声明版本

如果您有一个使用十进制$VERSION(浮点)的模块,并且您不想更改它,那么这个模块不适合您。与简单的$version赋值相比,version.pm没有任何优势:

我们的$VERSION=“1.02”;

由于Perl v5.10.0无论如何都包含version.pm比较逻辑,所以您根本不需要做任何事情。

如何将模块从十进制转换为点十进制

如果您过去使用过十进制$VERSION并希望切换到点十进制$ERSION,则需要一次性转换为新格式。

重要注意事项:您必须确保新的$VERSION数值大于当前小数$VERSION;这并不总是显而易见的。首先,将旧的十进制版本(例如1.02)转换为标准化的点十进制形式:

$perl-Mversion-e'打印版本->解析(“1.02”)->正常'v1.20.0版

然后递增任何带点小数部分(v1.20.1或v1.21.0)。

如何解密()点状特殊版本

使用版本;我们的$VERSION=版本->声明(“v1.2.3”);

这个声明()方法总是创建点状的decimal版本对象。在模块中使用时,您必须将其与“use-version”放在同一行,以确保PAUSE和安装工具正确读取$version。您还应该将“版本”添加到模块元数据文件的“configure_requires”部分。请参阅中的说明ExtUtils::MakeMaker模块::生成了解详细信息。

重要注意事项:即使传入看起来像十进制数(“1.2”)的值,也会创建一个点小数(“v1.200.0”)。为了避免在旧Perl上出现混淆或意外错误,请遵循以下准则:

如果您坚持将version.pm与普通十进制版本一起使用,请使用parse()而不是声明。请参阅“分析和比较版本”了解详细信息。

另请参见版本::内部有关版本号转换的更多信息,请引用、计算版本号并声明开发人员或“alpha”版本号。

分析和比较版本

如果您需要比较版本号,但无法确定它们是否表示为数字、字符串、v字符串或版本对象,则应使用version.pm将它们解析为对象进行比较。

如何parse()一个版本

这个parse()方法接受任何可能是版本的内容,并返回相应的版本对象,同时执行任何必要的转换。

一些示例:

$variable版本->解析($variation)---------   -------------------------1.23 v1.230.0“1.23”v1.230.01.23版1.23.0版“v1.23”v1.23.0版本“1.2.3”v1.2.3“v1.2.3”v1.2.3

请参见版本::内部有关版本号转换的更多信息。

如果您不想实际创建完整的版本对象,但仍想验证给定字符串是否符合要解析为版本的条件,则可以直接使用两个帮助器函数:

is_lax()

lax标准对应于版本解析器当前允许的内容。以下所有格式均可用于点特殊格式字符串:

1.2版1.2345.61.23_4版1.23451.2345_01
is_strict()

如果您想限制自己对版本字符串组成的定义,is_strict()仅限于以下列表中的版本字符串:

v1.234.52.3456

请参见版本::内部有关定义合法版本字符串形式的正则表达式的详细信息,以及如何在自己的代码中使用这些正则表达式is_lax()is_strict()不足以满足您的需求。

如何比较版本对象

版本对象重载化学机械抛光<=>操作员。Perl会根据这两个操作符自动生成所有其他比较操作符,这样所有正常的逻辑比较都会起作用。

if(version->parse($v1)==version->parse($v2)){#做一些事情}

如果将版本对象与非版本对象进行比较,则非对象术语将使用转换为版本对象parse()。这可能会产生令人惊讶的结果:

$v1=版本->解析(“v0.95.0”);$bool=$v1<0.94;#真,因为0.94是v0.940.0

始终与版本对象进行比较有助于避免意外:

$bool=$v1<版本->解析(“v0.94.0”);#错误的

请注意,“alpha”版本对象(版本字符串包含尾部下划线段)与不带下划线的等效版本相比要小:

$bool=版本->解析(“1.23_45”)<version->parse(“1.2345”);#真的

请参见版本::内部有关“alpha”版本的更多详细信息。

对象方法

is_alpha()

仅当使用下划线创建版本对象时为True,例如。

版本->解析('1.002_03')->is_alpha;#真的版本->声明('1.2.3_4')->is_alpha;#真的

is_qv()

仅当版本对象是点特殊版本时才为True,例如。

版本->解析('v1.2.0')->is_qv;#真的版本->声明('v1.2')->is_qv;#真的qv('1.2')->是qv;#真的版本->解析('1.2')->is_qv;#错误的

法线()

返回一个字符串,该字符串具有标准的“规格化”点小数形式,带有前导v和至少3个组件。

版本->声明('v1.2')->正常;#第1.2.0节版本->解析('1.2')->正常;#v1.200.0版

数字()

返回以纯十进制表示对象的值。

版本->声明('v1.2')->numify;#1.002000版本->解析('1.2')->numify;#1.200

字符串()

返回一个尽可能接近原始表示形式的字符串。如果原始表示是一个数字文字,那么它将以perl通常在字符串中表示它的方式返回。只要将版本对象插入到字符串中,就会使用此方法。

版本->声明('v1.2')->字符串;#1.2版版本->解析('1.200')->字符串;#1.2版本->解析(1.02_30)->字符串;#1.023

导出的功能

qv()

不再建议使用此函数,但为了与现有代码兼容,对其进行了维护。如果不想将其导出到命名空间,请使用以下表单:

使用版本0.77();

is_lax()(最大值)

(默认情况下不导出)

此函数接受标量参数并返回一个布尔值,指示该参数是否符合版本号的“lax”规则。不允许使用前导空格和尾随空格。

is_strict()

(默认情况下不导出)

此函数接受标量参数并返回一个布尔值,指示该参数是否符合版本号的“严格”规则。不允许使用前导空格和尾随空格。

作者

约翰·皮科克<jpeacock@cpan.org>

另请参阅

版本::内部.

珍珠.