[Moscow.pm] функция не из нашего пакета

Dmitry E. Oboukhov unera на debian.org
Пн Дек 29 01:53:43 PST 2008


On 12:51 Mon 29 Dec     , Alexander Lourier wrote:
AL> On Monday 29 December 2008 12:37:44 Vladimir V. Perepelitsa wrote:

>> &App::foo и &main::foo это ссылки на одну и ту-же функцию.
>> так что выяснить что является настоящим именем, а что алиасом -
>> неоднозначно. можно к примеру пройтись рекурсивно по всем неймспейсам и
>> найти все имена по равенству ссылок.

AL> Тоже хотел так ответить сначала. А потом подумал, что caller каким-то макаром
AL> догадывается о настоящем имени.
это caller вызваный ИЗНУТРИ функции.
там можно и просто тупо __PACKAGE__ или даже __FILE__ юзать.
а надо снаружи функции эту же задачу решить

AL> ==
AL> package Ap;

AL> use base 'Exporter';
AL> our @EXPORT=qw(foo);

AL> sub foo
AL> {
AL> my @caller = caller(0);

AL> use Data::Dumper;
AL> print STDERR Dumper(\@caller);

AL> return 'blah';
AL> }

AL> package main;

Ap->> import();

AL> sub foo1
AL> {
AL> return 'blah2';
AL> }

AL> foo();
AL> ==

AL> Выдает:

AL> ~$ perl a.pl
AL> $VAR1 = [
AL> 'main',
AL> 'a.pl',
AL> 25,
AL> 'Ap::foo',
AL> 1,
AL> 0,
AL> undef,
AL> undef,
AL> 256,
AL> '',
AL> undef
AL> ];

>>> имеется некая функция, скажем foo.
>>> 
>>> как можно узнать из какого пакета данная функция?
--
... mpd is off

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera на debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537
----------- следущая часть -----------
A non-text attachment was scrubbed...
Name: отсутствует
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20081229/03bc5e72/attachment.bin>


Подробная информация о списке рассылки Moscow-pm