首页 > 解决方案 > 比较版本而不使用版本 CPAN 模块

问题描述

假设我有 2 个版本变量:

$one = "1.2.3"
$two = "1.2.4"

如何比较这两个版本变量的版本是否匹配或一>二或一<二?

请注意,我有一个只读系统,无法添加任何 Perl 模块。因此我不能添加versionPerl 模块。

标签: perl

解决方案


对于您发布的字符串,只要每个组件小于 10 ,标准字符串比较运算符(cmp、、等)就可以使用。lt

对于您发布的字符串,如果您首先使用转换它们,只要每个组件小于 2 32,标准字符串比较运算符(cmp、等)就可以工作。ltpack('N*', split(/\./, $v))

但这不适用于 Perl 世界中常见的所有版本。如果这是您必须处理的版本,请使用版本模块。(这不需要从 CPAN 安装任何东西,因此可以满足您的要求。)

my $v1 = version->parse($one);
my $v2 = version->parse($two);

创建的对象覆盖数字和字符串比较运算符,以便它们可用于比较对象。


推荐阅读