2014-02-05 7 views
-1

МодульКак создавать собственные модули Perl

package ExampleModule; 

use strict; 
use base "Exporter"; 
our @export = qw/hello_world/; 
sub hello_world 
{ 
    print "Hello,world"; 
} 
1 

Тест:

perl -c examplemodule.pm 
    examplemodule.pm syntax OK 

Сценарий:

use ExampleModule; 
hello_world(); 
exit; 

, но я получаю сообщение об ошибке

Ошибка: Не удается найти ExampleModule.pm в @INC (@INC содержит:/USR/местные/lib64/perl5/USR/местные/доли/perl5/USR/lib64/perl5/vendor_perl/USR/доля/perl5/vendor_perl/USR/lib64/perl5/USR/доли/perl5) на until.pl линии 229. НАЧАТЬ не удалось. - компиляция прервана в until.pl линии 229.

Что неправильно в мой модуль, пожалуйста, дайте мне знать,

EDIT

package ExampleModule; 

use strict; 
use base "Exporter"; 
our @EXPORT = qw(hello_world); 

sub hello_world { 
    print "Hello,world"; 
} 
1; 

сохраняется с ExampleModule.pm

#!/usr/bin/perl -w 
use strict; 
use lib "/home/Admin/Desktop/Perl_Work_Space/ExampleModule.pm/"; 
use ExampleModule ; 
hell_world(); 
exit; 

сохранены с first.pl

получаю ошибку

[[email protected] Perl_Work_Space]$ perl first.pl 
Undefined subroutine &main::hell_world called at first.pl line 5. 

ответ

1

Вы пропускаете путь к модулю в @INC. Чтобы исправить это, Вы можете сказать, Perl, где искать модули,

use lib "lib/"; # relative or absolute path to ExampleModule.pm 
use ExampleModule; 
hello_world(); 

Также ExampleModule.pm должен иметь пакет линии в верхней части, и использование, но не наследуют Exporter модуль,

package ExampleModule; 

use strict; 
use Exporter "import"; 
our @EXPORT = qw/hello_world/; 

sub hello_world { 
    print "Hello,world"; 
} 
1; 
+0

как упомянуть путь модуля в @INC, пожалуйста, дайте мне знать – user3269877

+0

'использовать Lib«/home/Admin/Desktop/Perl_Work_Space/examplemodule.pm/»; use ExampleModule; hello_world(); 'но все равно получаю такую ​​же ошибку – user3269877

+0

, тогда нам не нужно добавлять' #!/Usr/bin/perl -w'? – user3269877

1

В дополнение к оператор use lib ...;, имя_пакета и имя файла должны иметь одинаковое правописание, включая капитализацию. Поэтому переименуйте файл в ExampleModule.pm.

Хотя мне интересно, почему perl -c examplemodule.pm не выдает предупреждение.

И вы должны использовать our @EXPORT = qw/hello_world/;

+0

Я не знаю, и имя файла и имя модуля имеют разную капитализацию. – user3269877

Смежные вопросы