Thread Modulversion vergleichen (15 answers)
Opened by bianca at 2010-11-28 08:35

topeg
 2010-11-29 19:26
#143194 #143194
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
geht doch Einfacher:
Code (perl): (dl )
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
sub versionsvergleich {
    #
    # Rückgabe:
    # =========
    # > = linke Version ist höher
    # = = Versionen sind gleich
    # < = rechte Version ist höher
    # E = Fehler aufgetreten
    #
    return 'E' if !defined $_[0] || $_[0] eq '' || !defined $_[1] || $_[1] eq '';    
    my @versions=@_;
    for my $ver (@versions)
    {
      if($ver=~/^(\d+)(?:\D(\d+)(?:\D(\d+)?))?$/)
      {
        $ver=$1*1000*1000;
        $ver+=$2*1000 if($2);
        $ver+=$3 if($3);
      }
      else
      { return 'E' }
    }
    
    return '=' if($versions[0] == $versions[1]);
    return '>' if($versions[0] > $versions[1]);
    return '<' if($versions[0] < $versions[1]);
    return 'E';
}

oder
Code (perl): (dl )
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
sub versionsvergleich {
    #
    # Rückgabe:
    # =========
    # > = linke Version ist höher
    # = = Versionen sind gleich
    # < = rechte Version ist höher
    # E = Fehler aufgetreten
    #
    return 'E' if !defined $_[0] || $_[0] eq '' || !defined $_[1] || $_[1] eq '';    
    my @versions=@_;
    for my $ver (@versions)
    {
      my @l=split(/\D+/$ver);
      return 'E' unless(@l);
      $ver=\@l;
    }

    for my $pos (0..2)
    {
      return '<' if($versions[0][$pos] < $versions[1][$pos]);
      return '>' if($versions[0][$pos] > $versions[1][$pos]);
    }
    return '=';
}

Dein Code ist mir viel zu kompliziert :-)

View full thread Modulversion vergleichen