Perl – Subrotinas e passagem de parâmetros

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

Leave a comment