#ifndef INCLUDE__PRINTARRAYS_PRINTFUNC__H
#define INCLUDE__PRINTARRAYS_PRINTFUNC__H
void print_array_char(const char *array);
void print_array_int(const int array[], int l);
#endif
####
#include
#include
#include "printfuncs.h"
void print_array_char(const char *array) {
int l;
int i;
l = strlen(array);
printf("Length of char array is %d,\n", l);
for (i = 0; i < l; i++) {
printf("Element array[%d] = %c,\n", i, array[i]);
}
}
void print_array_int(const int array[], int l) {
int i;
printf("Length of int array is %d,\n", l);
for(i = 0; i < l; i++) {
printf("Element array[%d] = %d,\n", i, array[i]);
}
}
##
##
use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'PrintArrays',
VERSION_FROM => 'PrintArrays.pm',
OBJECT => 'PrintArrays$(OBJ_EXT) printfuncs$(OBJ_EXT)',
);
__END__
##
##
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "printfuncs.h"
MODULE = PrintArrays PACKAGE = PrintArrays
PROTOTYPES: DISABLE
void
print_array_char(array)
const char *array
##
##
void
print_array_int2_impl(arraypacked, len)
const char *arraypacked
I32 len
CODE:
print_array_int((const int *)arraypacked, len);
##
##
package PrintArrays;
use warnings;
our $VERSION = "0.001";
use XSLoader;
use Exporter 'import';
our @EXPORT_OK = qw(print_array_char print_array_int print_array_int2);
XSLoader::load("PrintArrays");
sub print_array_int2 {
my($arr) = @_;
print_array_int2_impl(pack("i*", @$arr), 0+@$arr);
}
1;
__END__
##
##
perl -I./blib/lib -I./blib/arch -we 'use PrintArrays qw(print_array_char print_array_int2); print_array_char("grt"); $arr = [42,52,12,46,68]; print_array_int2($arr);'
##
##
Length of char array is 3,
Element array[0] = g,
Element array[1] = r,
Element array[2] = t,
Length of int array is 5,
Element array[0] = 42,
Element array[1] = 52,
Element array[2] = 12,
Element array[3] = 46,
Element array[4] = 68,
##
##
void
print_array_int(array)
AV *array
CODE:
int *arrayc;
I32 len = av_len(array) + 1;
Newxz(arrayc, len, int);
I32 ind;
for (ind = 0; ind < len; ind++) {
SV **elt = av_fetch(array, ind, 1);
int val = SvIV(*elt);
arrayc[ind] = val;
}
print_array_int(arrayc, len);
Safefree(arrayc);
##
##
perl -I./blib/lib -I./blib/arch -we 'use PrintArrays qw(print_array_int); $arr = [42,52,12,46,68]; print_array_int($arr);'
##
##
Length of int array is 5,
Element array[0] = 42,
Element array[1] = 52,
Element array[2] = 12,
Element array[3] = 46,
Element array[4] = 68,