#!/usr/bin/ruby -w def version_compare v1, v2 p v1, v2 p1 = v1.scan(/(\d+|\w+)/).flatten p2 = v2.scan(/(\d+|\w+)/).flatten p p1, p2 size = (p1.size > p2.size ? p1.size - 1 : p2.size - 1) for i in 0..(size) if p1[i].nil? and not p2[i].nil? return -1 end if not p1[i].nil? and p2[i].nil? return 1 end if p1[i] != p2[i] if p1[i] > p2[i] return 1 end return -1 end end return 0 end p version_compare("0.1", "0.1a") p version_compare("0.1a", "0.1a-1") p version_compare("0.1a-1", "0.1b") p version_compare("0.1b", "0.1a-9.5.4") p version_compare("0.1a-9.5.4", "0.1a-9.5.4") p version_compare("4.0x-8", "4.1") p version_compare("1.2.3-2.1", "1.2.4-2.2") p version_compare("19990827-20", "19990827-20a") p version_compare("3.x.0d", "3.x.0f") p version_compare("0.5.9.1+000216-6", "0.5.9.2+000216-6") p version_compare("1.2alpha+1-2", "1.2alpha+2-1") # numeric versions only #def vcomp v1, v2 # # < : -1 # # == : 0 # # > : 1 # p1 = v1.split "." # p2 = v2.split "." # for i in 0..(p1.size > p2.size ? p1.size - 1 : p2.size - 1) # #puts " #{p1[i].to_i} <=> #{p2[i].to_i}" # if p1[i].to_i != p2[i].to_i # if p1[i].to_i > p2[i].to_i # return 1 # end # return -1 # end # end # return 0 #end # ##ruby = RUBY_VERSION #ruby = "1.6.1.0.4.25" # #ARGV.each{ |arg| # puts arg # puts "#{arg} <=> #{ruby}: #{vcomp(arg, ruby)}" #}