package Bar;
use Foo;
sub bar { fooit "hello from bar"; }
package Foo;
sub fooit {
# Somehow I want this function to know it was called
# from the "Bar" module (in this case).
}
Предпочтительно, это было бы сделано без явно переданного аргумента, содержащего имя вызывающего модуля.Может ли функция определить, из какого модуля она была вызвана?
Вы, вероятно, следует объяснить, почему вы хотите знать, как это вряд ли что-то вы можете рассчитывать на во всех возможных ситуациях для большинства целей. – tchrist
Это для целей ведения журнала, поэтому я могу сказать: «fooit был вызван из Bar в 00:00:00». Не могли бы вы рассказать о подводных камнях здесь? – gcbenison
Я часто пишу свои собственные функции 'debug', которые работают так, поэтому я знаю, откуда вы. Обычно люди не хотят знать, в какой пакет был скомпилирован вызывающий фрейм, а скорее его имя файла и номер строки, так как 'warn' и' die' не дают терминатора новой строки. «Ловушка», если таковая имеется, заключается в том, что любой может всегда писать '{package Other; some :: function()} ', и это не так, как если бы они находились в файле' Other.pm' или что-то в этом роде. На самом деле, они могут также вырезать файл и строку, но я думаю, если вы не находитесь в какой-то враждебной среде, это не имеет большого значения. – tchrist