[SP-pm] bons hábitos em perl->sugestões?

Thiago Rondon thiago at aware.com.br
Fri Aug 1 06:14:10 PDT 2008


Maravilha, nunca usei o FileHandle realmente. Vou dar uma olhada nela.

Ou seja, voltando ao inicio da pergunta, temos várias soluções, agora 
temos outra !
Dependendo de nossa necessidade, iremos ter um modulo ou uma maneira de 
fazer
diferente! Talvez, eu me expressei mal sobre o confuso... o que quis 
dizer foi algo
como "There is More Than One Way to Do it"!

Esta discussão seria interessante em um buteco. :) Como discutir 
preferencias de
utilização de modulos, assim como de sistemas operacionais, 
distribuições, editores
de texto, tabulação e por aí vaí!

Valeu!
-Thiago Rondon

Luis Motta Campos escreveu:
> Thiago, me desculpe a demora. Eu andei postando para uns novatos na 
> lista, sobre erros e sobre o Data::Serializer, no outro thread... :)
>
> Thiago Rondon wrote:
>> Como acessar efetuar isto no open ? Honestanemente, nem procurei nem
>>  procurei a documentação do open agora. Simplesmente nunca vi em
>> algum código espeficicar por exemplo O_NONBLOCK para acessar um
>> device com open!
>>
>> Aqui fica minha dúvida, como reproduzir o codigo abaixo com open ?
>>
>> use Fcntl; sysopen(MODEM, "/dev/cua0", O_NONBLOCK|O_RDWR);
>
> É engraçado que você me colou a receita proposta pelo Perl Cookbook 
> para "non-blocking I/O", sem olhar a documentação... mas a tua é pior 
> que a do Cookbook, já que você não trata erros:
>
> http://www.unix.com.ua/orelly/perl/cookbook/ch07_15.htm
>
> diz
>
> use Fcntl;
> sysopen(MODEM, "/dev/cua0", O_NONBLOCK|O_RDWR)
>     or die "Can't open modem: $!\n";
>
> Bom, eu nunca gostei do Cookbook exatamente por causa destas soluções 
> meia-boca. Ele tenta resolver o problema, mas é sempre sub-ótimo.
>
> Na minha humilde opinião de quem quase não usa "receitas-de-bolo", se 
> você escreve um Cookbook deveria se certificar que você tem a melhor 
> solução possível para um dado problema.
>
> O que você está procurano é um módulo chamado FileHandle, que é parte 
> dos módulos do Perl Core desde 17/Out/1994:
>
> http://perldoc.perl.org/FileHandle.html
>
> E a forma "boa" de se fazer Non-Blocking I/O é
>
> use FileHandle;
> my $fh = new FileHandle '/dev/cua0', O_NONBLOCK | O_RDWR;
>
> Algumas vantagens:
>
> 1. Isto é uma chamada de alto nível, não aquela porcaria
>    complicada de manter que você viu no Cookbook;
> 2. Posso fazer coisas bacanas, como setar autoflush: $fh->autoflush(1);
> 3. Tenho 'non-blocking' print() e printf();
> 4. Consigo fechar um FileHandle com close() e ainda saber se o
>    SO fez a coisa certa pelas variáveis de erro do perl;
> 5. Ganho todas as vantagens da implementação dos módulos IO::*,
>    que são infinitamente mais simples e mais poderosos que o
>    sys{open,read,write}();
> 6. Tiro vantagen do PerlIO, o novo subsistema de IO do Perl
>    (a partir do 5.6.X, se eu não estou enganado).
>
> > Talvez eu seja um brincalhão em Perl. ;) Eu me divirto no Perl, então
> >  vamos nos divertir!
>
> Eu sou um Engenheiro de Software. Eu não brinco em serviço. ;-)
>
> Espero que isso faça você parar de usar sysopen() para sempre.
> Putamplexos.



More information about the SaoPaulo-pm mailing list