in reply to Re: how to get alias name of anonymous sub?
in thread how to get alias name of anonymous sub?

I want to create a module get info from different websites.And the other ones can calle my module'api just like this:
my $n=new->new(); $n->get_from_bbc(#some param#) $n->get_from_voanews(#some param#)
Now I implement it like this.
package news; sub new { *get_from_bbc=sub{ #post GET request to www.bbc.com get www.bbc.com; #and do some process return res; }; *get_from_voanews=sub{ #post GET request to www.bbc.com get www.bbc.com; #and do some process return res; } #and more sub like above #and more sub like above #and more sub like above #and more sub like above }
But it seem trivial ,I thought if i can do like this .It will be better
package news; sub new { my %news_sites={ get_from_bbc=>'www.bbc.com', get_from_voanews=>'www.voanews.com', #more websites# } foreach (keys %news_sites) { *{$_}=sub{ #post GET request to www.bbc.com ############### #if i can get the name of Subroutine #I can do it like this. ############ get %news_sites{$name_of_Subroutine}; #and do some process return res; }; }
But the problem is that inside anonymous sub I don't know the other call the anonymity by
$n->get_from_bbc(#some param#)
or
$n->get_from_voanews(#some param#)
!

Replies are listed 'Best First'.
Re^3: how to get alias name of anonymous sub?
by GrandFather (Saint) on Nov 29, 2010 at 06:27 UTC

    That sounds like a task for AUTOLOAD. Consider:

    use strict; use warnings; package news; my %news_sites = ( bbc => 'www.bbc.com', voanews => 'www.voanews.com', #more websites# ); sub new { ... } sub AUTOLOAD { my ($base, $site) = $news::AUTOLOAD =~ /::(\w+)_(\w+)/; return '' if $base ne 'get_from' || ! exists $news_sites{$site}; my $res = "got from $news_sites{$site}\n"; # or appropriate proces +sing return $res; } package main; print news::get_from_bbc();

    Prints:

    got from www.bbc.com
    True laziness is hard work