Ответ 1
caller - это правильный способ сделать в @eugene указал если вы хотите сделать это внутри подпрограммы.
Если вы хотите, чтобы другая часть вашей программы могла идентифицировать информацию о пакете и имени для coderef, используйте Sub::Identify.
Кстати, глядя на
sub test()
{
print __LINE__;
}
&test();
есть несколько важных моментов: Во-первых, не используйте prototypes, если вы не пытаетесь имитировать встроенные функции. Во-вторых, не используйте &
, когда вызывает подпрограмму, если только вам не нужны необходимые эффекты.
Поэтому этот фрагмент лучше писать как:
sub test
{
print __LINE__;
}
test();