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: [email protected] jabber://[email protected]
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment: signature.asc
Description: Digital signature

--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org

Ответить