Как отмечено в perlmodlib , имя вашего модуля следует начинать с заглавной буквы:
Perl неофициально резервирует имена модулей в нижнем регистре для таких модулей, как integer
и strict
. Другие модули обычно начинаются с заглавной буквы и используют смешанный регистр без подчеркивания (должны быть короткими и переносными).
Одним из способов вызова подпрограммы, определенной в другом пакете, является полное определение имени этого подпрограммы при его вызове:
SettingsGeneral::printScreen "important message\n";
Если вам нужна только ссылка на printScreen
, возьмите ее с помощью оператора обратной косой черты
my $subref = \&SettingsGeneral::printScreen;
и назовите его одним из
&$subref("one\n");
&{$subref}("two\n");
$subref->("three\n");
Вы можете создать псевдоним в вашем текущем пакете:
*printScreen = \&SettingsGeneral::printScreen;
printScreen("another urgent flash\n");
Пропустите круглые скобки (необходимо, поскольку подпрограмма в текущем пакете не была известна во время компиляции), написав:
use subs 'printScreen';
*printScreen = \&SettingsGeneral::printScreen;
printScreen "the sky is falling!\n";
Модуль Exporter может выполнить эту кастодиальную работу за вас:
SettingsGeneral.pm:
package SettingsGeneral;
use Exporter 'import';
our @EXPORT = qw/ printScreen /;
sub printScreen {
print $_[0];
}
1;
главный:
#! /usr/bin/perl
use warnings;
use strict;
use SettingsGeneral;
printScreen "foo!\n";