programacion - ¿Cómo puedo obtener el número de archivo y línea donde se creó una referencia de subrutina Perl?
perl guia completo pdf (2)
Podría intentar mirar a la caller
. Esto es lo que el depurador usa para construir rastros de pila, entonces tal vez es lo que quiere.
No creo que __LINE__
, __FILE__
y __PACKAGE__
te ayuden aquí, ya que solo proporcionan la ubicación del punto de ejecución actual , lo que significa que, dado un código de referencia o sub como en tu código, obtendrás los mismos resultados.
Dada una referencia de subrutina, ¿hay alguna manera de averiguar el número de archivo y línea donde se declaró la subrutina? advierte y tus amigos parecen acertar, pero necesito esto externamente. Aquí está mi programa de prueba:
#!/usr/bin/perl -l
use strict;
use warnings;
use B;
# line 99 ''bin/some_code.pl''
{
no strict ''refs'';
print B::svref_2object(/*{''Foo::some_sub''})->LINE;
print B::svref_2object(/&Foo::some_sub)->GV->LINE;
}
Foo::some_sub();
package Foo;
# line 23 ''bin/some_file.pl''
sub some_sub {
warn "Got to here";
}
Que resultados:
102
102
Got to here at ''bin/some_file.pl'' line 24.
La información de línea no es lo que estoy esperando, así que supongo que estoy haciendo algo mal (B :: GV tiene un método FILE correspondiente, pero hasta que no funcione LINE, no me sirve de mucho).
¿Hay alguna otra forma de obtener esta información y estoy haciendo algo mal en el código anterior?
Actualización : Al parecer, los métodos ''ARCHIVO'' y ''LÍNEA'' parecen funcionar bien si no estoy usando directivas de línea. Parece que puede ser un error en el módulo B :: GV.
Ya estás haciendo algo de esto, pero también ves el hilo de Perlmonks "Seguir el nombre de archivo / número de línea de un valor de código anónimo" .