Este é um exemplo de passagem de variáveis como parâmetros a uma subrotina em Perl, também conhecida como função definida pelo usuário, ou simplesmente função.
- Design-time
#!/usr/bin/perl
use warnings;
use strict;
my ($a, $b) = (10,20);
print "Before calling subroutine:\ta = $a\tb = $b\n";
print sum($a,$b), " (sum)\n";
print "After calling subroutine:\ta = $a\tb = $b\n";
sub sum{
my $total = 0;
#passing parameters by value
# my ($a, $b) = @_;
# $a = $_[0] / 10;
# $b = $_[1] / 10;
#here $a and $b are private (local) variables
#passing parameters by reference
$_[0] /= 10;
$_[1] /= 10;
for my $i(@_){
print "$i\t";
$total += $i;
}
for(@_){
print "$_\t";
$total += $_;
}
for(my $j = 0; $j <= $#_; $j++){
print "$_[$j]\t";
$total += $_[$j];
}
$total;
}
- Runtime
- Sintaxe
Na linha 5, foram definidas 2 variáveis ($a e $b) que fazem parte do array de argumentos na chamada à função sum que ocorre na linha 9. Como há parênteses, o nome da função não precisa ser precedido pelo & (ampersand, e comercial, et ou and).
Em Perl, todos os parâmetros de entrada de uma sub-rotina são armazenados em um array especial @_. Se você quiser se referir ao n-ésimo argumento, basta usar a sintaxe $_[n-1]. Observe as linhas 18, 19, 23, 24, 37 e 38.
Nas linhas 26, 31 e 36 iniciam os 3 laços for, que são equivalentes, isto é, imprimem os elementos do array de argumentos já modificados e cuja soma é retornada pela função.
Se precedermos as linhas 23 e 24 com o # (number sign, hash, cerquilha, jogo da velha), tornando-as comentários, e retirarmos o # das linhas 17, 18 e 19, os valores das variáveis $a e $b não serão alterados.
- Reflexão
Apesar da vitória da luz sobre a escuridão, um dos legados mais comuns das trevas é a traição. É oportuno lembrar-se das traições que mudaram o curso da história.
Por 30 moedas de prata, Judas Iscariotes, um dos doze apóstolos, traiu Cristo ao beijá-lo na bochecha para que as autoridades soubessem sua identidade. Seu ato levou à morte de Jesus por crucificação e fez de Judas o mais notório traidor da história.
One thought on “Perl – Subrotinas e passagem de parâmetros”