3

Perlを使用していくつかのアプリケーションのバージョンを比較する必要があります。そして問題は、すべてのバージョンの最後の部分が数字とアルファベットに対応する文字で設定できることです。つまり、次のようになります。

12.3a == 12.31
12.3b == 12.32
12.3c <> 12.34

バージョンモジュールを見ましたが、数字と下線しか扱っていないようです。
多分私は過負荷を使用する必要がありますか?最良かつ最もエレガントなソリューションは何ですか?

4

3 に答える 3

3

Sort::Versionsを試すことができます。モジュールの説明から:

Sort::Versions を使用すると、多くの共有ライブラリ システムやリビジョン管理パッケージが使用する「バージョン番号」のように、数値以外の文字列と数値が混在する文字列を簡単に並べ替えることができます。これは、共有ライブラリを処理しようとしている場合に非常に役立ちます。テキスト内に可変幅の数値フィールドを散在させるアプリケーションにも適用できます。他のアプリケーションは間違いなく見つけることができます。

于 2012-08-10T15:51:31.517 に答える
3

変な仕様です。正規化はおそらく進むべき道です。

use version qw( qv );

sub normalise_version {
    my ($v) = @_;
    $v =~ s/([a-i])/ ord($1)-ord('a')+1 /eg;
    return qv("v$v");
}

normalise_version($v1) <=> normalise_version($v2)

上記の 12.3 では、12.31 より小さいと見なされます。それが間違っているかどうか教えてください。

于 2012-08-10T15:38:47.230 に答える
1

David Wheeler のSemVerを見たことがありますか?

于 2012-08-10T15:31:38.813 に答える