21

によって生成されたこれに気づきましたCatalyst.pl。それは明らかにある種の注釈のないハックです。このようなバージョン文字列を設定する利点は何ですか?彼らが何をしようとしているのかさえ理解できません。

our $VERSION = '0.01';
$VERSION = eval $VERSION;
4

4 に答える 4

26

Perlではバージョン番号は複雑です。これは、厄介な詳細を探している人のための優れた概要です。物事を間違えるための微妙な方法がいくつもあることに驚かれるかもしれません...

しかし、あなたの質問に対する直接の答えは、さまざまなものがさまざまな形式を期待しているということです。CPANの場合、たとえば文字列としての開発バージョンに関心があります。実行時は、それらを数値として気にします。

の場合を考えてみましょう$VERSION = "0.01_001"。正しくeval数値に変換します。0.01001

于 2010-09-03T20:43:15.753 に答える
12

perlmodstyleから:バージョン番号

モジュールの「ベータ」または「アルファ」バージョンをリリースしたいが、CPAN.pmにそれを最新のものとしてリストさせたくない場合は、通常のバージョン番号の後に少なくとも2桁の数字が続く「_」を使用します。1.20_01。これを行う場合は、次のイディオムをお勧めします。

  1. $ VERSION = "1.12_01";
  2. $ XS_VERSION = $ VERSION; #XSコードがある場合にのみ必要
  3. $ VERSION = eval $ VERSION;

このトリックを使用すると、MakeMakerは最初の行のみを読み取り、アンダースコアを読み取りますが、perlインタープリターは$ VERSIONを評価し、文字列を数値に変換します。$ VERSIONを数値として扱う後の操作では、$VERSIONが数値ではないという警告を表示せずに処理できるようになります。

于 2010-09-03T20:53:33.543 に答える
6

evalは"0.001_001"、Perl数値リテラル(読みやすさのためにアンダースコアを許可する)の規則に従って、文字列を数値に変換します。結果は数0.001001です。

evalがない場合、文字列は、文字列を変換するための規則に従って数値に変換されます。この規則は、最初の非数値文字で停止します。

例えば:perl -e 'print "0.001_001" + 0'

于 2010-09-03T20:44:07.147 に答える
5

私はこれを誤解しているかもしれませんが、一部の自動コードパーサーはコード行を見たいと思っています。

 our $VERSION = '0.01';

しかし、あなたは本当に$VERSIONが文字列の代わりにfloatを保持することを望んでいます。

あなたはこの記事を読みたいと思うかもしれません、私は私が行くことを知っています。

ああ、親愛なる神よ、今私はなぜ私が使うのか覚えています

our $VERSION = 20100903;

スタイルのバージョン番号。それは正気ではありません。私はPerlが大好きですが、それは純粋で洗練された、集中した狂気です。デビッド・ゴールデンの記事を要約しようとはしません。あなたはそれを読んで泣くだけです。

于 2010-09-03T20:39:47.937 に答える