Не могу понять, баг это или что.
Следующий код работает с Inline::C
, но не с Inline::CPP
#!/usr/bin/perl
use warnings;
use Inline C;
my @array = (1..10);
print findAvLen(\@array), "\n";
__END__
__C__
int findAvLen(AV* arrayIn) {
return av_len(arrayIn);
}
Приведенный выше код работает нормально, но замените C
на CPP
, и я получаю сообщение об ошибке Не удается найти auto/main/findAvLen.al в @INC...
Я могу заставить работать другой встроенный код C++. Например, можно передать список переменных во встроенный код с многоточием, как это делается в этом примере, но мне интересно, почему AV* не работает! Например, я хочу использовать подпрограмму для преобразования массивов perl, переданных в C++, в векторы, например. void perl2vector(AV* ar, std::vector
вместо того, чтобы вставлять код для выполнения такого преобразования в каждую написанную мной функцию C++, которая принимает аргумент массива. Как я могу использовать синтаксис этого примера для передачи массива perl такому конвертеру?
Это похоже на ошибку, но тем временем uesp нашел обходной путь:
int findAvLen(SV* arrRef) {
AV * arr = MUTABLE_AV(SvRV(arrRef));
return av_len(arr);
}
arr
теперь эквивалентен arrayIn
, желаемому в приведенном выше примере кода.