[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