Вы не можете передать массив Perl и автоматически преобразовать его, скажем, в массив C. Вам придется прибегнуть к XS и perlapi , чтобы сделать это. Причина довольно проста: массив perl содержит нетипизированные скаляры. Массив C содержит N элементов одного типа.
То, что вы можете сделать, это иметь XSUB
, который занимает SV*
. SV
обозначает скалярное значение. Это, естественно, включает ссылки (RV
) и, следовательно, ссылки на массивы (AV
).
Вот как можно проверить, является ли данный SV*
источник ссылкой на массив:
SV* tmpSV;
AV* theArray;
if (SvROK(source)) { /* it's a reference */
tmpSV = (SV*)SvRV(source); /* deref */
if (SvTYPE(tmpSV) == SVt_PVAV) { /* it's an array reference */
theArray = (AV*)tmpSV;
/* do stuff with the array here */
}
}