subrutinas programacion lenguaje guia funciones ejemplos desde completo cero aprender perl

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.