您正在从Perl 5.36.3查看此文档的版本。查看最新版本
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=VERSION->parse(“1.02_03”);#阿尔法#比较混合版本样式(小数、点小数、对象)if(version->parse($v1)==version->parse($v2)){#做一些事情}#排序混合版本样式@orderd=sort{version->parse($a)<=>version->parse($b)}@列表;
版本对象是在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版本对象。在模块中使用时必须将其与“使用版本”放在同一行,以确保PAUSE和安装工具正确读取$version。您还应该将“版本”添加到模块元数据文件的“configure_requires”部分。请参阅中的说明ExtUtils::MakeMaker或模块::生成了解详细信息。
重要注意事项:即使传入看起来像十进制数(“1.2”)的值,也会创建一个点小数(“v1.200.0”)。为了避免在旧Perl上出现混淆或意外错误,请遵循以下准则:
始终使用带点小数(至少)三个组成部分
始终使用铅字v
始终引用版本
如果您坚持将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()(最大值)
-
宽松的标准与版本解析器当前允许的标准相对应。以下所有格式均可用于点特殊格式字符串:
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<version->parse(“v0.94.0”);#错误的
请注意,“alpha”版本对象(其中版本字符串包含尾随的下划线段)与不带下划线的等效版本相比要小:
$bool=版本->解析(“1.23_45”)<version->parse(“1.2345”);#真的
请参见版本::内部有关“alpha”版本的更多详细信息。
#对象方法
#is_alpha()
如果并且仅当版本对象是用下划线创建的,例如。
版本->解析('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>
#另请参阅
版本::内部.
珍珠.