---
name: "Dpkg::Version"
section: "3"
platform: "linux"
package: "libdpkg-perl"
version: "1.18.25"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/Dpkg::Version"
---

# Dpkg::Version(3)

handling and comparing dpkg-style version numbers

## NAME

Dpkg::Version - handling and comparing dpkg-style version numbers

## DESCRIPTION

The Dpkg::Version module provides pure-Perl routines to compare dpkg-style version numbers (as used in Debian packages) and also an object oriented interface overriding perl operators to do the right thing when you compare Dpkg::Version object between them.

## METHODS

- $v = Dpkg::Version-\>new($version, %opts)

  Create a new Dpkg::Version object corresponding to the version indicated in the string (scalar) `$version`. By default it will accepts any string and consider it as a valid version. If you pass the option "check =\> 1", it will return undef if the version is invalid (see version\_check for details).

  You can always call `$v`-\>*is\_valid()* later on to verify that the version is valid.

- boolean evaluation

  When the Dpkg::Version object is used in a boolean evaluation (for example in "if ($v)" or "$v \|\| 'default'") it returns its string representation if the version stored is valid ($v-\>*is\_valid()*) and undef otherwise.

- $v-\>*is\_valid()*

  Returns true if the version is valid, false otherwise.

- $v-\>*epoch()*, $v-\>*version()*, $v-\>*revision()*

  Returns the corresponding part of the full version string.

- $v-\>*is\_native()*

  Returns true if the version is native, false if it has a revision.

- $v1 \<=\> $v2, $v1 \< $v2, $v1 \<= $v2, $v1 \> $v2, $v1 \>= $v2

  Numerical comparison of various versions numbers. One of the two operands needs to be a Dpkg::Version, the other one can be anything provided that its string representation is a version number.

- "$v", $v-\>*as\_string()*, $v-\>as\_string(%options)

  Accepts an optional option hash reference, affecting the string conversion.

  Options:

  - omit\_epoch (defaults to 0)

    Omit the epoch, if present, in the output string.

  - omit\_revision (defaults to 0)

    Omit the revision, if present, in the output string.

  Returns the string representation of the version number.

## FUNCTIONS

All the functions are exported by default.

- version\_compare($a, $b)

  Returns -1 if `$a` is earlier than `$b`, 0 if they are equal and 1 if `$a` is later than `$b`.

  If `$a` or `$b` are not valid version numbers, it dies with an error.

- version\_compare\_relation($a, $rel, $b)

  Returns the result (0 or 1) of the given comparison operation. This function is implemented on top of *version\_compare()*.

  Allowed values for `$rel` are the exported constants REL\_GT, REL\_GE, REL\_EQ, REL\_LE, REL\_LT. Use *version\_normalize\_relation()* if you have an input string containing the operator.

- $rel = version\_normalize\_relation($rel\_string)

  Returns the normalized constant of the relation `$rel` (a value among REL\_GT, REL\_GE, REL\_EQ, REL\_LE and REL\_LT). Supported relations names in input are: "gt", "ge", "eq", "le", "lt", "\>\>", "\>=", "=", "\<=", "\<\<". "\>" and "\<" are also supported but should not be used as they are obsolete aliases of "\>=" and "\<=".

- version\_compare\_string($a, $b)

  String comparison function used for comparing non-numerical parts of version numbers. Returns -1 if `$a` is earlier than `$b`, 0 if they are equal and 1 if `$a` is later than `$b`.

  The "~" character always sort lower than anything else. Digits sort lower than non-digits. Among remaining characters alphabetic characters (A-Z, a-z) sort lower than the other ones. Within each range, the ASCII decimal value of the character is used to sort between characters.

- version\_compare\_part($a, $b)

  Compare two corresponding sub-parts of a version number (either upstream version or debian revision).

  Each parameter is split by *version\_split\_digits()* and resulting items are compared together. As soon as a difference happens, it returns -1 if `$a` is earlier than `$b`, 0 if they are equal and 1 if `$a` is later than `$b`.

- @items = version\_split\_digits($version)

  Splits a string in items that are each entirely composed either of digits or of non-digits. For instance for "1.024~beta1+svn234" it would return ("1", ".", "024", "~beta", "1", "+svn", "234").

- ($ok, $msg) = version\_check($version)

  - $ok = version\_check($version)

  Checks the validity of `$version` as a version number. Returns 1 in `$ok` if the version is valid, 0 otherwise. In the latter case, `$msg` contains a description of the problem with the `$version` scalar.

## CHANGES

### Version 1.01 (dpkg 1.17.0)

New argument: Accept an options argument in `$v`-\>*as\_string()*.

New method: `$v`-\>*is\_native()*.

### Version 1.00 (dpkg 1.15.6)

Mark the module as public.
