On Wed, Jul 10, 2002 at 12:52:59PM -0400, Aaron J Mackey wrote:
>
> Check this out:
>
> #!/usr/bin/perl -w
> use strict;
> use Inline C => 'DATA';
>
> my $a = [ 1 .. 10 ];
> print "was: " . join(" ", @{$a}) . "\n";
> dump_arrref($a);
> __DATA__
> __C__
> void dump_arrref(SV* arrref) {
> int i, n, val;
> AV* arr = SvRV(arrref);
> n = av_len(arr) + 1;
> printf("is: ");
> for(i = 0 ; i < n ; i++) printf("%d ", SvIV(av_shift(arr)));
> printf("\n");
> }
>
Try this:
- for(i = 0 ; i < n ; i++) printf("%d ", SvIV(av_shift(arr)));
+ for(i = 0 ; i < n ; i++) {
+ SV *sv = av_shift(arr);
+ printf("%d ", SvIV(sv));
+ }
SvIV is a macro, which expands it's contents twice, so you end up
shifting twice.
--
Richard Clamp <[EMAIL PROTECTED]>