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

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

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

use strict;
use warnings;

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

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

30
задан Sinan Ünür 1 April 2010 в 12:41
поделиться

2 ответа

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

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

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

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

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

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

sub test
{
    print __LINE__;
}
test();
18
ответ дан 27 November 2019 в 23:24
поделиться

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

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

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

54
ответ дан 27 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: