Хотя было бы лучше изменить значение use
на require
, которое проверит, загрузилось ли оно уже первым, если вы действительно хотели написать C на Perl, вероятно самым близким к тому, что вы пытаетесь сделать, было бы просто установить некоторую переменную и проверить, существует ли, но вы должны скрыть определение подпрограммы в eval
.
# во включенном файле:
my $ DateHolidayLoaded;
if ( !$DateHolidayLoaded ) {
eval {
sub IsDateHoliday { ... }
$DateHolidayLoaded = 1;
};
}
Вы также можете проверить наличие функции, но вы должны указать, какое пространство имен использовать ... и в этом случае это будет 'main':
if ( ! defined( main->can( 'IsDateHoliday' ) ) ) { require 'is_date_holiday.pl' }
Но это будет работать только в файле, выполняющем включение; если вы выполните этот тест в файле с определением подпрограммы, он всегда будет истинным.