sub setSubtraction {
my ($min, $st) = @_;
my @minuendo = @{$min};
my @subt = @{$st};
my %hm;
my %hs;
my @res;
foreach(@minuendo){ $hm{$_} = 1;}
foreach(@subt){$hs{$_} = 1;}
while (($key, $value) = each(%hm)){
if($hs{$key} != 1){
push @res, $key;
}
}
return @res;
}
O código acima ilustra alguns pontos pelos quais eu demorei muito pra aprender Perl. E mesmo já tendo feito alguns programas em Perl, ainda tenho extrema dificuldade em ler um programa….porque nunca me lembro o que %, @ e $ representam, e para qual variável $_ aponta. As coisas são pouco intuitivas, e os programas em geral são feios e difíceis de serem lidos (sobre tudo se tiverem expressões regulares).
Tá certo que eu não sou um grande expert de Perl, mas mesmo pessoas que conhecem a linguagem demoraram pra ver o que o programa fazia. E pior: cada uma das pessoas que viu o código usaria outra síntaxe para escrever alguns trechos do programa (cada uma deu uma sugestão diferente para trechos diferentes). Sem mudar o algoritmo e as estruturas de dados usadas, existem N variantes de sintaxe possíveis. Acho que muita flexibilidade às vezes atrapalha.
Como diria o Raphael, autor do código acima: “Write once, never read it again”. Fico imaginando o trabalho que deve ser manter grandes sistemas.
Agora, reconheço o poder de Perl para tratar strings, textos e afins, e por sua rapidez para escrever protótipos. Foi por isso que escolhi essa linguagem (que na época não conhecia) para escrever um programa que lia um texto e etiquetava as palavras segundo a posição da sílaba tônica e número de sílabas. Em C teria sido muito mais difícil.
Alguém sabe me dizer o que o programinha acima faz ?