Oi povo!
Para auxiliar os estudos do pessoal que vai fazer a sub amanhã, segue uma lista de alguns dos erros mais comuns na questão de Perl na prova 2:
- uso do operador diamond ( <> ): muita gente teve dificuldade em lidar com abrir o arquivo a partir do nome passado como argumento e, caso nenhum nome fosse especificado, ler da entrada padrão. O operador diamond faz exatamente isso: ele automatiza a leitura de arquivos passados como argumentos e, caso nenhum seja especificado, ele lê da entrada padrão, tal qual o <STDIN>. Vale a pena ver novamente o exercício 3 da aula 27 e a sua respectiva solução.
- funções "sort" e "reverse": essas funções recebem como argumento uma lista ou um array e devolvem uma lista, que no exercício deveria ser guardada em um array! (teve gente que guardou em um hash, o que estava errado no contexto do exercício). Já as funções "keys" e "values" recebem um hash e devolvem, respectivamente, uma lista de chaves e valores desse hash.
- ordenação usando "for" e variáveis auxiliares: muita gente usou um "for" e uma variável auxiliar para fazer a ordenação, como se estivesse em linguagem C; tudo bem, funciona, mas a ideia seria aproveitar os recursos da linguagem Perl para fazer esse trabalho mais facilmente (no caso, utilizando a função sort).
Acho que esses foram os principais pontos; uma boa prova, para quem fazer a sub amanhã!
[]s,
Marcelo, gostaria de saber se o código abaixo é desnecessário?
if( defined $frequencia{$1} ){
$frequencia{$1}++;
}
else{
$frequencia{$1} = 1;
}
Basta fazer a operação abaixo, uma vez que o Perl inicializa sozinho "$frequencia{$1}", certo? Daí o código acima seria substituido por:
$frequencia{$1}++;
Eu sei que funciona assim. Gostaria de saber se na prova também pode ser feito dessa maneira.
Tonny
if( defined $frequencia{$1} ){
$frequencia{$1}++;
}
else{
$frequencia{$1} = 1;
}
Basta fazer a operação abaixo, uma vez que o Perl inicializa sozinho "$frequencia{$1}", certo? Daí o código acima seria substituido por:
$frequencia{$1}++;
Eu sei que funciona assim. Gostaria de saber se na prova também pode ser feito dessa maneira.
Tonny
Basta fazer direto a operação $frequencia{$1}++; você só precisa ter cuidado com o contexto: por exemplo, se você quiser imprimir todas as chaves de um hash de frequências de vogais, se ao contar as vogais de um texto a vogal "i" não aparecer nenhuma vez, ao iterar para todas as vogais na hora de imprimir, na vez de $frequencia{'i'} você teria um warning de undef.