Problem: You can't write to protocol or model safely because one of the force functions wasn't used. You might end up changing variables and constants you didn't mean to change. (They might have fixed that in 5.24?)
use strict;
use warnings;
use feature qw( say );
use Inline C => <<'__EOS__';
void testing(char* s) {
s[0] = 'y';
}
__EOS__
my $x = "x";
my $y = $x;
say "$x-$y";
testing($y);
say "$x-$y";
x-x
y-y <-- Changed both $x and $y
or
for (1..2) {
my $y = "x";
say $y;
testing($y);
}
x
y <-- Changed the constant!
Note: The caller will need to do s/\0.*// for $protocol, $model;