, , :
$x = 0+$x;
,
$ perl -MJSON::XS -E'
$_ = 4;
say encode_json([$_]); # [4]
"".$_;
say encode_json([$_]); # ["4"]
$_ = 0 + $_;
say encode_json([$_]); # [4]
'
, - , , JSON:: XS Perl. :
sub is_stringy {
{ no warnings 'void'; "".$_[0]; }
return 1;
}
, :) , "" XS. , , SvPOKp ( SvGETMAGIC ).
use Inline C => <<'__EOI__';
SV* is_stringy(SV* sv) {
SvGETMAGIC(sv);
return SvPOKp(sv) ? &PL_sv_yes : &PL_sv_no;
}
__EOI__
$_ = 4;
say is_stringy($_) ?1:0;
{ no warnings 'void'; "".$_; }
say is_stringy($_) ?1:0;
$_ = 0+$_;
say is_stringy($_) ?1:0;
! , B SVp_POK, () XS
use B qw( svref_2object SVp_POK );
sub is_stringy {
my ($s) = @_;
my $sv = svref_2object(\$s);
return $sv->FLAGS & SVp_POK;
}
SvGETMAGIC , .