слишком много документации и сразу все не объять. с XS только начал
разбираться, поэтому позадаю еще ламерских вопросов :)

создал с помощью h2xs каталог с проектом

h2xs -n MyModule

затем написал в MyModule/MyModule.xs две функции на C, которые я вызваю из
тестов и
make test делает все тесты.

то есть в тесте написано

use_ok 'MyModule';
my $result = MyModule::my_foo();
ok что-то с $result
и так далее.

из теста - работает.

теперь дошел до того что нужно над вызовом этих функций perl-обертку
написать

соответственно полез редактировать файл lib/MyModule.pm.

там вроде все просто

написан автолоад констант (я их не использую) и сумарно следующее:

package MyModule;

use 5.010001;
use strict;
use warnings;
use Carp;

require Exporter;
use AutoLoader;

our @ISA = qw(Exporter);
...
require XSLoader;
XSLoader::load('MyModule', $VERSION);

теперь я тут хочу вставить функцию, которая будет вызывать мою XS-ную
функцию, пишу:

sub my_cool_foo
{
   $result = my_foo();
   ...
}

и вот тут при компиляции модуля ругается, что этой функции нет:

Bareword "my_foo" not allowed while "strict subs" in use at ...

и если даже указать полное имя пакета то все равно ругается.  и как
обращаться к XS'ным функциям изнутри модуля?

решил я вынести все XS'ы в сабмодуль

то есть сделать чтобы

MyModule - был чистый перл, а он уже говорил
use MyModule::XS;

и дергал из него функцию, но не пойму по документации что надо изменить в
Makefile.PL чтобы тот мог собирать это. а переименование MyModule.xs в XS.xs
и правка имен названий на добавление суффиксов ::XS приводит к какой-то
ахинее.

где бы посмотреть примерчик проектика где бы было основной модуль на перле и
дополнительный с суффиксом ::что-то на XS?
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить