У меня есть perl, v5.6.1, собранный для многопоточной MSWin32-x86-x86-битной сборки 638, предоставляемой ActiveState.
Я работаю над сценарием Perl, в котором я объявил константы, которые позже используются для сравнения. По какой-то причине я получаю сообщение об ошибке, в котором говорится, что что-то в строке имени константы содержит недопустимые символы в строке 31 скрипта (строка сразу после предложения use 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 до версии, которая поддерживает ссылку на хэш при объявлении констант.