📄 sv_set
字号:
#################################################################################### $Revision: 5 $## $Author: mhx $## $Date: 2007/01/02 12:32:29 +0100 $###################################################################################### Version 3.x, Copyright (C) 2004-2007, Marcus Holland-Moritz.## Version 2.x, Copyright (C) 2001, Paul Marquess.## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.#### This program is free software; you can redistribute it and/or## modify it under the same terms as Perl itself.##################################################################################=provides__UNDEFINED__=implementation__UNDEFINED__ SvMAGIC_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END#if { VERSION < 5.9.3 }__UNDEFINED__ SvPVX_const(sv) ((const char*) (0 + SvPVX(sv)))__UNDEFINED__ SvPVX_mutable(sv) (0 + SvPVX(sv))__UNDEFINED__ SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END#else__UNDEFINED__ SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))__UNDEFINED__ SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)__UNDEFINED__ SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ ((sv)->sv_u.svu_rv = (val)); } STMT_END#endif__UNDEFINED__ SvSTASH_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END#if { VERSION < 5.004 }__UNDEFINED__ SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END#else__UNDEFINED__ SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END#endif=xsubsIVTestSvUV_set(sv, val) SV *sv UV val CODE: SvUV_set(sv, val); RETVAL = SvUVX(sv) == val ? 42 : -1; OUTPUT: RETVALIVTestSvPVX_const(sv) SV *sv CODE: RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1; OUTPUT: RETVALIVTestSvPVX_mutable(sv) SV *sv CODE: RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1; OUTPUT: RETVALvoidTestSvSTASH_set(sv, name) SV *sv char *name CODE: sv = SvRV(sv); SvREFCNT_dec(SvSTASH(sv)); SvSTASH_set(sv, (HV*) SvREFCNT_inc(gv_stashpv(name, 0)));=tests plan => 5my $foo = 5;ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43);ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);my $bar = [];bless $bar, 'foo';ok($bar->x(), 'foobar');Devel::PPPort::TestSvSTASH_set($bar, 'bar');ok($bar->x(), 'hacker');package foo;sub x { 'foobar' }package bar;sub x { 'hacker' }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -