B::COW#
Ask whether a string shares its buffer copy-on-write, and how many scalars share it.
perl copies a string by sharing its buffer and copying only when one of the copies is modified. These helpers expose that state, mostly to test code that wants to know a copy was avoided.
Synopsis#
use B::COW qw(can_cow is_cow cowrefcnt cowrefcnt_max);
my $a = "x" x 100;
my $b = $a; # shares $a's buffer
print is_cow($b) ? "shared\n" : "own\n";
print cowrefcnt($a), "\n"; # how many share it, as perl counts
print cowrefcnt_max(), "\n"; # 255
Functions#
can_cow() is true: this perl copies on write. is_cow($sv) is true for a string whose buffer is shared copy-on-write. cowrefcnt($sv) is the share count perl keeps in the buffer (0 for a shared hash key string, which has no such count), or undef for a value that is not copy-on-write. cowrefcnt_max() is the largest count, after which perl copies instead of sharing. Nothing is exported by default.
This is a native implementation of B::COW 0.007’s COW.xs; its B/COW.pm is used unchanged.
Differences from upstream#
None.
Functions#
Copy on write#
can_cow#
Whether this perl copies strings on write.
Synopsis
use B::COW qw(can_cow);
print can_cow() ? "copy on write\n" : "plain copies\n";
What you get back
True: pperl, like perl 5.44, shares string buffers copy-on-write.
is_cow#
Whether a string shares its buffer copy-on-write.
cowrefcnt#
How many scalars share a copy-on-write buffer, as perl counts.
cowrefcnt_max#
The largest copy-on-write share count.