_  _   ,_
/^\/^\-/ @D
~(________/ PERL.LT
|L |L
L L
Straipsniai  Funkcijos 
Funkcijos/caller - pasiima dabartinės paprogramės kvietimo kontekstą
  • caller EXPR
  • caller

    Gražina einamosios paprogrames iškvietimo konteksta. Skaliariniame kontekste gražina caller paketo pavadinima, jei yra caller, tuo atveju, jei esame paprogramej arba eval, arba require, o kitu atveju - neapibrežta reikšmæ. Sarašo kontekste, gražina

        ($package, $filename, $line) = caller;

    Su EXPR, gražina daugiau informacijos, kuria naudoja debugeris pažymeti stack'o kelia. EXPR reikšme parodo, per kiek freimų eiti atgal nuo dabartinio.

        ($package, $filename, $line, $subroutine, $hasargs,
        $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($i);

    Čia $subroutine gali būti (eval), jei freimas nera paprogrames kvietimas, bet eval. Tokiu atveju, dar reikalingi $evaltext ir $is_require reikalingi užsetinti: $is_require yra true, jei freimas sukurtas require ar use, $evaltext yra eval EXPR sakinio tekstas. Iš tikrūjų, tai eval BLOCK sakinyje, $filename yra (eval) , bet pats $evaltext yra neapibrežtas. (Taip pat pažymetina, kad kiekvienas use sukuria require freima eval EXPR freimo viduje .) $subroutine gali būti ir (unknown), jei būtent ši paprograme buvo ištrinta iš sibolių lenteles. $hasargs yra true, jei naujas @_ atvejis buvo freimui nustatytas. $hints ir $bitmask savy turi pragmatiškas užuominas, su kuriomis buvo sukompiliuotas caller'is. $hints ir $bitmask reikšmes keičiasi tarp Perl versijų ir nera patartinos naudojimui išoriškai.

    Be to, kai iškvestas iš DB paketo, caller'is gražina detalesnæ informacija: užsetina saraša kintamųjų @DB::args, kad šie būtų argumentai, su kuriais iškviečiama paprograme.

    Reiktų pasisaugoti, nes po optimizer'is gali tureti pagerinta freimų iškvietima dar prieš caller tures šansų gauti informacija. Tai reiškia, kad caller(N) gali negražinti norimos informacijos apie iškvietimo freima, kurios tikimasi iš N > 1 . Konkrečiai, @DB::args gali tureti informacija iš anksčiau, kai caller buvo iškviestas.

algirdas@perl.lt 2005.04.11 - $dabar