[Cascavel-pm] Res: Perl

Breno G. de Oliveira breno em clavis.com.br
Segunda Novembro 27 08:38:45 PST 2006


É verdade Edem, mas era só um comentário para alguém que estava
começando a programar em Perl. Realmente, se é pra começar é melhor
começar direito, mas me atentei apenas ao fato do "use warnings"
reclamar quando o handle está em minúsculas:

 perl -we "open bla, '<', 'teste.txt' or die;"
Unquoted string "bla" may clash with future reserved word at -e line 1.

e não em maiúsculas:

perl -we "open BLA, '<', 'teste.txt' or die;"
(ok)

e por isso acabo concordando tanto com o Nelson, sobre o modelo
canônico, como com você e o Adriano, que citam os perigos da questão
(lembrando que constantes muitas vezes são escritas em maiúsculas
também, como LOCK_EX e EXDEV, e geram resultados inesperados se alguém
usar o mesmo nome como handle de arquivo).

Portanto, Ramon, ao abrir arquivos, sempre que possível, faça algo como
(a partir do Perl 5.6):

-----------------8<----------------
open my $arq, '<', 'nome_do_arquivo'
     or die "$!\n";
-----------------8<----------------

hoje provavelmente não fará muita diferença, mas se for trabalhar com
projetos grandes que usem muitos módulos e abram e fechem arquivos o
tempo todo, pode te poupar muito trabalho de depuração (especialmente se
você ganhar o péssimo hábito de nomear seus handles da mesma forma, como
FH, FILE, IN, OUT, ARQ, ARQUIVO, etc).

[]s

breno

Eden Cardim wrote:
> On 11/25/06, Breno G. de Oliveira <breno em clavis.com.br> wrote:
>> veja se não é isso... outra coisa, acho que (não) é uma boa prática usar
>> palavras em minúsculas como handles de arquivos. Fica fácil diferenciar
>> handles de palavras reservadas se colocá-los em maiúsculas, por exemplo
>> (e diminui a possibilidade de conflitos no futuro).
> 
> Na verdade, não é boa prática usar bareword algum como Handle de
> arquivo, nem maiúsculas nem minúsculas:
> 
> "One of the most efficient ways for Perl programmers to bring misery
> and suffering upon themselves and their colleagues is to write this:
>    open FILE, '<', $filename
>        or croak "Can't open '$filename': $OS_ERROR"; "
> 
> Damian Conway, Perl Best Practices.
> 
> Bareword handles podem se confundir com funções ou constantes
> importadas para seu pacote. Como se isso não bastasse, ainda tem o
> fato de que o escopo de bareword handles abrange todo o pacote atual,
> isso é abrangente demais para programas muito grandes.
> 
> Recomenda-se o uso de uma variável escalar: a função open vai colocar
> um objeto do tipo IO::Handle dentro dela.
> 


Mais detalhes sobre a lista de discussão Cascavel-pm