1 2 3 4 5 6 7 8
#!/usr/bin/perl use strict; use warnings; use 5.010; if (version->parse('1.2.4') <= version->parse('1.1')) { say "wahr"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
print Dumper \@{[version->parse("1.1")]}, \@{[version->parse("1.2.4")]}; $VAR1 = [ bless( { 'original' => '1.1', 'version' => [ 1, 100 ] }, 'version' ) ]; $VAR2 = [ bless( { 'original' => '1.2.4', 'qv' => 1, 'version' => [ 1, 2, 4 ] }, 'version' ) ];
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#!/usr/bin/perl use strict; use warnings; use 5.010; my @versions = ( version->parse('1.1'), version->parse('1.2.4'), version->parse('v1.1'), version->parse('v1.2.4'), version->parse('1.002003'), version->parse('1.002005'), version->parse('1.099'), version->parse('v1.99'), version->parse('1.101') ); say for sort @versions;
2018-06-16T18:20:46 biancaAu weia. Ich dachte mit dem Modul version wäre ich sorgenfrei.
2018-06-16T18:20:46 biancaWas haltet ihr davon, wenn ich jedem String vorn ein v voranzustellen soweit es noch nicht da ist?
1 2
our $VERSION = '1.02'; # for decimal versions, or our $VERSION = 'v1.2.3'; # for tuple versions
2018-06-16T20:06:07 haj:)Me too :)
2018-06-16T18:20:46 biancaDas hängt davon ab, mit welchen weiteren Verarbeitungsschritten das Modul dann verarbeitet wird
1 2 3 4 5 6 7 8 9 10 11 12 13
#!/usr/bin/perl use strict; use warnings; use 5.010; if (version->parse('1.2.4') <= version->parse('1.1')) {say "1wahr";} # 1wahr --> falsch if (version->parse('v1.2.4') <= version->parse('v1.1')) {say "2wahr";} # '' --> richtig require List::Util; say List::Util->VERSION; # 1.5 if (version->parse('1.19') <= version->parse('1.5')) {say "3wahr";} # 3wahr --> richtig if (version->parse('1.19') <= version->parse('1.50')) {say "4wahr";} # 4wahr --> richtig if (version->parse('v1.19') <= version->parse('v1.5')) {say "5wahr";} # '' --> falsch if (version->parse('v1.19') <= version->parse('v1.50')) {say "6wahr";} # 6wahr --> richtig
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
#!/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; } }
2018-06-17T06:45:05 biancaOk, verstanden... ich dachte, es ginge um die Entscheidung, welches Versionsformat Du selbst verwenden willst. In dem Fall ist meine klare Empfehlung, sich an das Versionsschema zu halten, das dieser CPAN Modul benutzt. Denn wenn Du mit einer real auf CPAN freigegebenen Version auf CPAN vergleichst, dann macht version das auch richtig!Im Moment möchte ich erstmal nur mit der größtmöglichen Genauigkeit feststellen, ob ein CPAN Modul in einer neueren Version vorliegt als benötigt oder eben nicht.
2018-06-17T06:45:05 biancaJa, weil "1.50" wie eine Zahl aussieht. Merkregel: Mit einem Punkt ist es eine Zahl, mit mehr als einem Punkt sind es mehrere voneinander unabhängige Zahlen. Wenn Du ein 'v' voranstellst, dann erzwingst Du die Interpretation als "Dotted Version", weil "v1.50" nicht wie eine Zahl aussieht.Habe noch Probleme mit List::Util: in der Util.pm steht zwar "sauber" our $VERSION = "1.50"; aber ausgelesen mit say List::Util->VERSION bleibt davon nur noch 1.5 übrig. Und damit bewirkt ein vorangestelltes v - was den anderen Fall heilt - genau das Gegenteil.
2018-06-17T06:45:05 biancaDas tut's. Allerdings ist dann das 'v' gar nicht nötig, weil bei zwei Punkten das version-Modul eh' die "Dotted Version"-Umrechnung macht....
Vielleicht das Präfix v bei Versionen mit mehr als einem Punkt und sonst nicht?
$version = ($version =~ /^([0-9.]+)/ && scalar(split /\./,$version) > 2 ? 'v' : '').$version
2018-06-17T10:08:13 hajDas tut's. Allerdings ist dann das 'v' gar nicht nötig, weil bei zwei Punkten das version-Modul eh' die "Dotted Version"-Umrechnung macht.
2018-06-17T10:08:13 hajÜbrigens: Vor nicht allzu langer Zeit ist kein geringerer als Dave Cross in genau diese Falle getreten mit der Erkenntnis dass "12.2" größer ist als "12.2.1": Version Numbers.
Quote:)Perl toolchain gang
2018-06-17T10:08:13 hajJetzt dürfen wir uns getrost etwas weniger doof fühlen.
use v5.10;
2018-06-17T15:54:58 GwenDragonManches bei Perl war schon damals™ modern™.
2018-06-17T16:41:53 rostiKommt drauf an wieviel Stellen die Subversion hat. Aber grds. hast du recht.Man muss halt nur wissen, daß aus 1.1 ein 1.100 wird und damit ist das eben mehr als 1.2.3