Dada una referencia de subrutina, ¿hay alguna forma de averiguar el archivo y el número de línea donde se declaró la subrutina? advierte y tus amigos parecen acertar, pero necesito esto externamente. Aquí está mi programa de pruebas:¿Cómo puedo obtener el número de archivo y línea donde se creó una referencia de subrutina Perl?
#!/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 da salida:
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 correspondiente Método FILE, pero hasta que 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 'FILE' y 'LINE' parecen funcionar bien si no estoy usando line directivas. Parece que puede ser un error en el módulo B :: GV.
Quizás una explicación más detallada de lo que está esperando y por qué podría ayudar. Es fácil para el lector casual pasar por alto los comentarios "especiales" en el ejemplo sin entender su efecto en el contador de líneas. – converter42