我有perl,v5.6.1为ActiveState提供的MSWin32-x86-多线程二进制版本638构建.
我正在处理一个Perl脚本,我已经声明了常量,以后用于比较目的.由于某种原因,我收到一个错误,指出常量名称行中的某些内容在脚本的第31行(在下面的代码中使用常量子句后面的行)中有无效字符.我检查并发现Constant名称中的'_'(下划线)是一个合法的角色.我也尝试将'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提供的常量版本不支持哈希引用.
解:
对常量使用常规声明.因此,声明如下:
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版本更新为在声明常量时支持哈希引用的版本.
问题是您正在使用哈希引用.constant
perl 5.6.1提供的版本不支持该版本.你要么必须删除大括号,要么升级你的constant
.