indietro

  • caller ESPR
  • caller

    Restituisce il contesto del chiamante della subroutine corrente. In un contesto scalare, restituisce il nome del package del chiamante se tale chiamante esiste, ovvero, se ci troviamo in una subroutine oppure eval o require, altrimenti il valore indefinito. In un contesto di lista, restituisce

        ($package, $nomefile, $linea) = caller;

    Con ESPR, restituisce dell'informazione addizionale che il debugger utilizza per stampare una traccia dello stack. Il valor di ESPR indica quanti record di attivazione risalire prima di quello corrente.

        ($package, $nomefile, $linea, $subroutine, $ha_argomenti,
        $voglio_array, $testo_eval, $e_richiesto, $indicazioni, $maschera_di_bit) = caller($i);

    Qui, a $subroutine può essere applicato (eval) se il record non è una subroutine ma un eval. In questo caso, vengono impostati elementi addizionali quali $testo_eval e $e_richiesto: $e_richiesto è vero se il record è creato da un'istruzione require o use, $testo_eval contiene il testo dell'istruzione eval ESPR. In particolare, per un'istruzione eval BLOCCO, a $filename è applicato (eval), ma $testo_eval è indefinito. (Va notato anche che ogni istruzione use crea un record require all'interno di un record eval ESPR. A $subroutine può anche essere applicato (sconosciuto) se a questa particolare subroutine capita di essere cancellata dalla tabella dei simboli. $ha_argomenti è vero se viene impostata una nuova istanza di @_ per il record. $indicazioni e $maschera_di_bit contengono indicazioni prammatiche che sono state utilizzate per compilare il chiamante. I valori $indicazioni e $maschera_di_bit sono soggetti a cambiamenti fra le versioni del Perl e non sono intese per l'uso esterno.

    Inoltre, quando viene chiamato all'interno del package DB, il chiamante restituisce informazioni più dettagliate: esso imposta la variabile di lista @DB::args per essere gli argomenti con i quali la subroutine è stata invocata.

    Siate consapevoli che l'ottimizzatore potrebbe avere ottimizzato a parte i record di attivazione, prima che il chiamante abbia una possibilità di ottenere l'informazione. Questo significa che chiamante(N) potrebbe non restituire l'informazione che riguarda il record di attivazione che vi aspettate di ottenere per N 1>. In particolare, @DB::args potrebbe avere l'informazione dalla volta precedente che caller è stato chiamato.