[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