[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