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]>

Reply via email to