Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Data::Util::modify_子例程为";做什么;大约是;?_Perl - Fatal编程技术网

Perl Data::Util::modify_子例程为";做什么;大约是;?

Perl Data::Util::modify_子例程为";做什么;大约是;?,perl,Perl,我只能理解它在之前/之后案例中的作用 它对周围的有什么作用?看起来像周围的就像之前的和之后的 从: 可选参数: before=>[子例程]在subr之前调用 around=>[子例程]围绕subr调用 after=>[子例程]在subr之后调用 根据实施情况,它似乎在做类似的事情: static SV* my_build_around_code(pTHX_ SV* code_ref, AV* const around){ I32 i; for(i = av_len(around

我只能理解它在
之前
/
之后
案例中的作用


它对
周围的
有什么作用?

看起来像
周围的
就像
之前的
之后的


从:

可选参数:

before=>[子例程]
在subr之前调用

around=>[子例程]
围绕subr调用

after=>[子例程]
在subr之后调用


根据实施情况,它似乎在做类似的事情:

static SV*
my_build_around_code(pTHX_ SV* code_ref, AV* const around){
    I32 i;
    for(i = av_len(around); i >= 0; i--){
        CV* current;
        MAGIC* mg;
        SV* const sv = validate(*av_fetch(around, i, TRUE), T_CV);
        AV* const params       = newAV();
        AV* const placeholders = newAV();

        av_store(params, 0, newSVsv(sv));       /* base proc */
        av_store(params, 1, newSVsv(code_ref)); /* first argument (next proc) */
        av_store(params, 2, &PL_sv_undef);      /* placeholder hole */

        av_store(placeholders, 2, (SV*)PL_defgv); // *_
        SvREFCNT_inc_simple_void_NN(PL_defgv);

        current = newXS(NULL /* anonymous */, XS_Data__Util_curried, __FILE__);
        mg = sv_magicext((SV*)current, (SV*)params, PERL_MAGIC_ext, &curried_vtbl, (const char*)placeholders, HEf_SVKEY);

        SvREFCNT_dec(params);       /* because: refcnt++ in sv_magicext() */
        SvREFCNT_dec(placeholders); /* because: refcnt++ in sv_magicext() */

        CvXSUBANY(current).any_ptr = (void*)mg;

        code_ref = newRV_noinc((SV*)current);
        sv_2mortal(code_ref);
    }
    return newSVsv(code_ref);
}

文档似乎没有暗示
前后
表示
之前
之后