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

Thiago Rondon thiago at aware.com.br
Thu Jul 31 12:49:53 PDT 2008


Talvez eu seja um brincalhão em Perl. ;) Eu me divirto no Perl, então 
vamos nos divertir!

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);

Abs!
-Thiago Rondon

Luis Motta Campos escreveu:
> Thiago Rondon wrote:
>> O sysopen pela precisão que ele pode lhe oferecer nas operações mais
>>  delicadas, porém você deve tomar alguns cuidados, enquanto o open 
>> cuida de tudo para você em relação ao sistema operacional (como por 
>> exemplo o número do "file descriptor", alguns unix (antigos, sim) tem
>>  limitações para file descriptor (que também é ajustado) no sistema 
>> operacional, como um número baixo, como "255" (você deve ler o 
>> open(2) e verificar o seu /proc por exemplo)).
>>
>> Ou seja, para usar o sysopen você tem que estar por 'dentro' da 
>> configuração e a maneira que o seu sistema operacional estará lidando
>>  com as operaçoes de leitura, ou tratar todas elas no código perl.
>
> Curto e grosso: sysopen() traz problemas de portabilidade no pacote. Eu
> não recomendo, mesmo que hajam outras vantagens.
> Porém, em alguns casos como por exemplo, a utilização de flags como 
> O_TRUNC, O_SYNC, O_SHLOCK, O_EXLOCK, O_BINARY e O_NOCTTY na abertura
>  de arquivos, ou mascara de arquivos a serem criados, alguns 
> tratamentos que o sistema operacional pode lhe oferecer pelo open 
> (existem diferenças nestes detalhes entre os sistemas operacionais, 
> mesmo nos sistemas padrões POSIX).
>
> Tem um módulo de compatibilidade que facilita muito a sua vida, a pesar
> da documentação não ser grande coisa. Olha o que o módulo POSIX pode
> fazer por você. Ele oferece um open() mais estável, mais simples, mais
> portável e tão poderoso quanto o nativo do Perl, sem te obrigar a levar
> junto as desvantagens do sysopen().
>
>> Ou seja, utilize o sysopen apenas se souber o que estiver fazendo 
>> realmente, e se a necessidade para trabalhar com arquivos de audio, 
>> binarios, rede talvez você possa precisar...
>
> Eu nunca precisei usar sysopen() para nada, em 12 anos e 4 países
> programando Perl para todo o tipo de sistema que você pode imaginar
> (não, windows não, eu não tenho imaginação tão fértil assim).
>
>> IO::File é interessante por que aceita os dois 'estilos' de 
>> nomeclatura de permissão, tanto do open como do sysopen, é além disso
>>  lida melhor com o 'handle' do arquivo em alguns casos (caso você for
>>  ver ele, veja algumas caracteristicas como o 'anonymous filehandler').
>>
>> Ou seja, o IO::File  normalmente trata todos os eventos, tanto em um
>>  caso como o outro, e tem todas as facilidades do Perl, porém é um 
>> modulo a mais... E se você precisar de otimizações, terão várias 
>> outras soluções no Perl, como a própria open. hehehe
>>
>> Eu ? Costumo a usar a open na maioria dos casos, a não ser em 
>> operações especiais que preciso de recursos da sysopen.
>
> Veja o POSIX::open, pelo menos... eu tenho certeza de que você poderia
> fazer mais com menos. Gostaria de ver um problema que eu não posso
> resolver com open() ou POSIX::open...
>
>> Confuso ? Por isto gosto do Perl! por que cada um escolhe um caminho,
>>  e cada um faz da sua maneira.
>
> Desculpe, como engenheiro de software profissional, eu tenho de 
> censurar este teu gosto por "confusão". Quando mais regulares e 
> uniformes, mais bem-documentados e previsíveis forem os teus sistemas, 
> menos horas extras você vai fazer e menos incêndios você vai apagar. 
> Por favor tome cuidado.
>
> Como diz o Otávio Fernandes, programe como se o cara que vai dar 
> manutenção tivesse uma espingarda de dois canos e soubesse onde você 
> mora. ;)
>
> Putamplexos!



More information about the SaoPaulo-pm mailing list