Пытаясь иметь дело со ссылками на уровне C, я не могу понять разницу (на практике) между newRV_inc
и newRV_noinc
. С этой целью я скопировал этот небольшой пример Inline :: C
.
#!/usr/bin/env perl
use strict;
use warnings;
use Devel::Peek 'SvREFCNT';
my $arrayref_inc = make_arrayref_inc();
print "inc: ", SvREFCNT($arrayref_inc), "\n";
my $arrayref_noinc = make_arrayref_noinc();
print "noinc: ", SvREFCNT($arrayref_noinc), "\n";
use Inline C => <<'END_C';
SV* make_arrayref_inc () {
AV * array = newAV();
SV * arrayref = newRV_inc((SV *)array);
return arrayref;
}
SV* make_arrayref_noinc () {
AV * array = newAV();
SV * arrayref = newRV_noinc((SV *)array);
return arrayref;
}
END_C
дает:
inc: 1
noinc: 1
Может ли кто-нибудь помочь мне понять, почему этот код ведет себя таким образом?