[SP-pm] Entendendo Protótipos

breno breno at rio.pm.org
Mon Dec 22 16:48:52 PST 2008


2008/12/22 Daniel de Oliveira Mantovani <daniel.oliveira.mantovani em gmail.com>:
> my $stat = período();
> Bom(a) $stat pessoal.
>
> Estou estudando Protótipos, e tenho algumas dúvidas vou tentar explicar.
>
> Por exemplo push(@array,$item);
>
> No protótipo é a mesma coisa que isso ?
>
> syb mypush (@array, $item);
>
> Ele faz a mesma coisa que push só que joga na sub rotina e o valor fica
> armazenado em @_ ?
>

Daniel,

protótipos são uma espécie de verificação de argumentos em tempo de
compilação, e permitem que vc chame subrotinas sem os parêntesis sem
gerar ambiguidade, como as funções built-in do Perl ("push", por
exemplo). A declaração de protótipos não envolve o nome da variável
onde vc pretende colocá-la, apenas o símbolo do tipo de variável ($,
@, %, &) que espera receber como parâmetros.

O "perldoc perlsub" fala muito bem sobre isso e vale a leitura. Alguns
exemplos de lá:

Declarado como:                 Chamado como:

sub mylink ($$)                   mylink $old, $new
sub myvec ($$$)                 myvec $var, $offset, 1
sub myindex ($$;$)             myindex &getstring, "substr"
sub mysyswrite ($$$;$)       mysyswrite $buf, 0, length($buf) - $off, $off
sub myreverse (@)             myreverse $a, $b, $c
sub myjoin ($@)                 myjoin ":", $a, $b, $c
sub mypop (\@)                 mypop @array
sub mysplice (\@$$@)       mysplice @array, @array, 0, @pushme
sub mykeys (\%)                mykeys %{$hashref}
sub myopen (*;$)                myopen HANDLE, $name
sub mypipe (**)                  mypipe READHANDLE, WRITEHANDLE
sub mygrep (&@)                mygrep { /foo/ } $a, $b, $c
sub myrand ($)                  myrand 42
sub mytime ()                    mytime


Para pegar "automagicamente" os valores da sua subrotina vc não quer
protótipos, e sim algo como o Method::Signatures
(http://search.cpan.org/perldoc?Method::Signatures)


[]s

-b


More information about the SaoPaulo-pm mailing list