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

Luis Motta Campos luismottacampos at yahoo.co.uk
Thu Jul 31 12:17:05 PDT 2008


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!
-- 
Luis Motta Campos is a software engineer,
Perl Programmer, foodie and photographer.


More information about the SaoPaulo-pm mailing list