#!/usr/bin/perl use strict; use warnings; use 5.010; sub version_vergleich { # Thema "version kaputt?" --> https://www.perl-community.de/bat/poard/thread/20476 my ($v1,$v2) = @_; my $praefix = scalar(split /\./,$$v1) > 2 || scalar(split /\./,$$v2) > 2 ? 'v' : ''; my $links = version->parse(($$v1 =~ /^([0-9.]+)/ ? $praefix : '').$$v1); my $rechts = version->parse(($$v2 =~ /^([0-9.]+)/ ? $praefix : '').$$v2); return $links < $rechts ? 1 : $links == $rechts ? 2 : 3; } my @deut = ('','<','=','>'); my $nr = 0; foreach my $ref ( { zeile => __LINE__, wert1 => '1.2.4', wert2 => '1.1', sollergebnis => 32, }, { zeile => __LINE__, wert1 => 'v1.2.4', wert2 => '1.1', sollergebnis => 32, }, { zeile => __LINE__, wert1 => '1.2.4', wert2 => 'v1.1', sollergebnis => 32, }, { zeile => __LINE__, wert1 => 'v1.2.4', wert2 => 'v1.1', sollergebnis => 3, }, { zeile => __LINE__, wert1 => '1.1', wert2 => '1.2.4', sollergebnis => 1, }, { zeile => __LINE__, wert1 => '1.2.4', wert2 => '1.2.4', sollergebnis => 2, }, { zeile => __LINE__, wert1 => '1.2.4.0', wert2 => '1.2.4', sollergebnis => 2, }, { zeile => __LINE__, wert1 => '1.2.4.0', wert2 => '1.2.4', sollergebnis => 32, }, { zeile => __LINE__, wert1 => '1.19', wert2 => '1.5', sollergebnis => 1, }, { zeile => __LINE__, wert1 => '1.19', wert2 => '1.5', sollergebnis => 12, }, { zeile => __LINE__, wert1 => 1.19, wert2 => 1.50, sollergebnis => 12, }, { zeile => __LINE__, wert1 => 1.19, wert2 => 1.5, sollergebnis => 1, }, { zeile => __LINE__, wert1 => 'v1.19', wert2 => 'v1.50', sollergebnis => 12, }, { zeile => __LINE__, wert1 => 'v1.19_01', wert2 => 'v1.19_02', sollergebnis => 1, }, ) { $nr ++; printf "Zeile %03d mit $ref->{wert1} ",$ref->{zeile}; print map {$deut[$_]} (split //,$ref->{sollergebnis}); print " $ref->{wert2} --> "; my $erg = version_vergleich(\$ref->{wert1},\$ref->{wert2}); my $treffer = 0; foreach my $char (split //,$ref->{sollergebnis}) { if ($erg == $char) { $treffer = 1; last; } } if ($treffer) { say "OK"; } else { say "FEHLER, tatsaechliches Ergebnis: $deut[$erg]"; exit; } }