I am going through github perl code
am 11.08.2011 18:03:22 von Emeka
--000e0cd31332b261ca04aa3cef86
Content-Type: text/plain; charset=ISO-8859-1
Hello All,
What is the purpose of colon here ?
sub pop : method {
my $self = shift;
my ($list) = $self->_prepare(@_);
pop @$list;
my $result = $list;
return $self->_finalize($result);
}
Is this how to do function alias?
sub sortBy {&sort_by} #
sub sort_by {
my $self = shift;
my ($list, $iterator, $context) = $self->_prepare(@_);
my $result = [sort { $a cmp $iterator->($b) } @$list];
return $self->_finalize($result);
}
--
*Satajanus Nig. Ltd
*
--000e0cd31332b261ca04aa3cef86--
Re: I am going through github perl code
am 11.08.2011 19:04:55 von jwkrahn
Emeka wrote:
> Hello All,
Hello,
> What is the purpose of colon here ?
>
> sub pop : method {
> my $self = shift;
> my ($list) = $self->_prepare(@_);
>
> pop @$list;
> my $result = $list;
>
> return $self->_finalize($result);
> }
perldoc perlsub
SYNOPSIS
To declare subroutines:
sub NAME; # A "forward" declaration.
sub NAME(PROTO); # ditto, but with prototypes
sub NAME : ATTRS; # with attributes
sub NAME(PROTO) : ATTRS; # with attributes and prototypes
sub NAME BLOCK # A declaration and a definition.
sub NAME(PROTO) BLOCK # ditto, but with prototypes
sub NAME : ATTRS BLOCK # with attributes
sub NAME(PROTO) : ATTRS BLOCK # with prototypes and attributes
To define an anonymous subroutine at runtime:
$subref = sub BLOCK; # no proto
$subref = sub (PROTO) BLOCK; # with proto
$subref = sub : ATTRS BLOCK; # with attributes
$subref = sub (PROTO) : ATTRS BLOCK; # with proto and attributes
The colon separates the sub name from the attributes.
> Is this how to do function alias?
>
> sub sortBy {&sort_by} #
>
> sub sort_by {
> my $self = shift;
> my ($list, $iterator, $context) = $self->_prepare(@_);
>
> my $result = [sort { $a cmp $iterator->($b) } @$list];
>
> return $self->_finalize($result);
> }
perldoc perlsub
[SNIP]
Because assignment of a reference to a typeglob creates an
alias, this can be used to create what is effectively a local
function, or at least, a local alias.
{
local *grow = \&shrink; # only until this block exists
grow(); # really calls shrink()
move(); # if move() grow()s, it
shrink()s too
}
grow(); # get the real grow() again
See "Function Templates" in perlref for more about manipulating
functions by name in this way.
John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction. -- Albert Einstein
--
To unsubscribe, e-mail: beginners-unsubscribe@perl.org
For additional commands, e-mail: beginners-help@perl.org
http://learn.perl.org/