我有爲MSWin32-x86構建的perl,v5.6.1 - 多線程二進制版本638由ActiveState提供。爲什麼Perl在用constant.pm使用散列引用時會抱怨?
我正在處理一個Perl腳本,我已經聲明瞭稍後用於比較的常量。出於某種原因,我得到一個錯誤,指出沿着常量名稱行在腳本行31(在下面的代碼中使用常量子句後面的行)有無效字符。我檢查並發現常量名中的'_'(下劃線)是一個合法的字符。我也嘗試將'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,
};
問題:
的問題是,Perl的5.6.1提供恆定的版本不支持散列引用。
SOLUTION:
使用常量的常規聲明。因此,該聲明如下所示:
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版本到支持散列引用聲明常量。
如果刪除最後一個逗號,會發生什麼情況? – 2009-02-03 18:26:23
哪個版本的Perl?你的代碼在Perl 5.8.8上可以正常工作。如果您的示例從第30行開始,那麼可能錯誤位於您粘貼的小部分代碼之上。 – 2009-02-03 18:26:26
我只是將常量聲明部分移動到測試腳本並運行該腳本,但仍然出現錯誤。我在Windows XP中運行ActivePerl有沒有關係?如果它在爲你運行,那對我來說可能是一個環境問題。 – tundal45 2009-02-03 18:33:19