Подтвердить что ты не робот

Как я могу получить имя текущей подпрограммы в Perl?

В Perl мы можем получить имя текущего пакета и текущего номера строки. Используя предопределенные переменные, такие как __PACKAGE__ и __LINE__.

Как и я хочу получить имя текущей подпрограммы:

use strict;
use warnings;

print __PACKAGE__;
sub test()
{
    print __LINE__;
}
&test();

В приведенном выше коде я хочу получить имя подпрограммы внутри функции test.

4b9b3361

Ответ 1

caller - это правильный способ сделать в @eugene указал если вы хотите сделать это внутри подпрограммы.

Если вы хотите, чтобы другая часть вашей программы могла идентифицировать информацию о пакете и имени для coderef, используйте Sub::Identify.

Кстати, глядя на

sub test()
{
    print __LINE__;
}
&test();

есть несколько важных моментов: Во-первых, не используйте prototypes, если вы не пытаетесь имитировать встроенные функции. Во-вторых, не используйте &, когда вызывает подпрограмму, если только вам не нужны необходимые эффекты.

Поэтому этот фрагмент лучше писать как:

sub test
{
    print __LINE__;
}
test();

Ответ 2

Используйте функцию caller():

my $sub_name = (caller(0))[3];

Это даст вам имя текущей подпрограммы, включая ее пакет (например, 'main::test'). Закрытие возвращает имена типа 'main::__ANON__', а в eval будет '(eval)'.