2008-12-10 18 views
27

¿Es posible obtener el número de línea fuente actual en Perl? El equivalente en C++ es __LINE__.¿Cómo puedo imprimir el número de línea de origen en Perl?

+0

Sin embargo, me pregunto: ¿por qué necesitarías esto? –

+3

Lo he usado para rastrear rápidamente el progreso a través de un proceso muy largo, y para verificar el orden en que se hacen las cosas, como puntos de interrupción pero sin usar el depurador –

+0

@LeonTimmermans: estoy respondiendo a su antiguo comentario sobre por qué un Perl el programador puede querer _ _FILE_ _ y _ _ LINE _ _. Básicamente, las mismas razones por las que un programador C/C++ podría quererlas. P.ej. hoy reformé una prueba para que se llamara Test :: Differences :: eq_or_diff en una subrutina. El número de línea informado estaba en la subrutina, no desde donde se llamó a la subrutina. Agregar __ LINE __ al nombre de la prueba me ayuda a encontrar la prueba que falla. Ahora si pudiera escribir una macro CODE_LOCATION en Perl5. –

Respuesta

51
print "File: ", __FILE__, " Line: ", __LINE__, "\n"; 

o

warn("foo"); 
+4

warn se imprimirá en STDERR. – mat

6

Nota hay un Gotcha con

-e'warn Perl ("foo")'

foo en la línea 1. -e

si termina con un salto de línea que no lo hará imprimir el número de línea

perl -e'warn ("foo \ n")'

foo

Esto está documentado en "perldoc -f morir", pero es quizás fácil perderse en la referencia de la sección "perldoc -f warn" para morir ...

1

Esto imprime la línea donde se encuentra, y también la "pila" (lista de las líneas de los programas de llamadas (scripts/modules/etc) que conducen al lugar donde están ahora)

while(my @where=caller($frame++)) { print "$frame:" . join(",",@where) . "\n"; } 
1

"utilizar la carpa" y jugar con las diversas rutinas y también se obtiene una pila: no estoy seguro si esta forma es mejor o peor que el método de "llamada" sugerido por cnd. He utilizado las variables LINE y FILE (y probablemente otras variables similares) en C y Perl para mostrar dónde obtuve el código y otra información al realizar la depuración, pero he visto poco valor fuera de un entorno de depuración.

Cuestiones relacionadas