ActiveStateが提供するMSWin32-x86-マルチスレッドバイナリビルド638用にビルドされたperl、v5.6.1があります。
後で比較のために使用される定数を宣言したPerlスクリプトに取り組んでいます。何らかの理由で、定数名の行に沿った何かがスクリプトの31行目(以下のコードのuse定数句の直後の行)に無効な文字が含まれていることを示すエラーが発生します。確認したところ、定数名の「_」(アンダースコア)は正当な文字であることがわかりました。また、「0.00」を「0」に変更して、それが原因かどうかを確認しようとしましたが、同じエラーが発生しました。何が間違っているのかわかりません。コンパイラがこれを好まない理由を誰かが知っていますか?
ありがとう!
コードは次のとおりです。
use constant {
MIN_NET_DLR => 0.00,
MAX_NET_DLR => 99.99,
MIN_SUM_DLR => 0.00,
MAX_SUM_DLR => 999.99,
MIN_UNITS => 0,
MAX_UNITS => 99,
MIN_SUM_UNITS => 0,
MAX_SUM_UNITS => 999,
PCT_THRES_AO => 1,
PCT_THRES_TRANS_CUST_BI => 20,
PCT_THRES_CUST => 3,
};
問題:
問題は、perl5.6.1によって提供される定数のバージョンがハッシュ参照をサポートしていないことです。
解決:
定数には通常の宣言を使用します。したがって、宣言は次のようになります。
use constant MIN_NET_DLR => 0.00;
use constant MAX_NET_DLR => 99.99;
use constant MIN_SUM_DLR => 0.00;
use constant MAX_SUM_DLR => 999.99;
use constant MIN_UNITS => 0;
use constant MAX_UNITS => 99;
use constant MIN_SUM_UNITS => 0;
use constant MAX_SUM_UNITS => 999;
use constant PCT_THRES_AO => 1;
use constant PCT_THRES_TRANS_CUST_BI => 20;
use constant PCT_THRES_CUST => 3;
解決策を提供してくれた@leonと、意見を取り入れてくれた他の人たちに感謝します。
更新:別の(より洗練された)解決策は、Perlのバージョンを、定数の宣言でハッシュ参照をサポートするバージョンに更新することです。