[Cascavel-pm] Res: Perl

Breno G. de Oliveira breno em clavis.com.br
Segunda Novembro 27 10:54:28 PST 2006


Sim e não (vide toda a discussão ;)

O open de 3 argumentos, até onde sei, foi incorporado a partir do perl
5.6 e, embora num mundo ideal os seus dois comandos de exemplo se
comportem da mesma forma, o de 2 argumentos pode se enrolar caso o nome
do arquivo contenha o caractere "<", por exemplo, e deve ser evitado
sempre que possível.

Fora que se a variável for definida de maneira errada (ou maliciosa) seu
programa pode apresentar comportamento errado por mudança de tipo de
abertura e eliminação de espaços no início do nome do arquivo.

Do perlopentut:

-----------8<-----------
There is also a 3-argument version of open, which lets you put the
special redirection characters into their own argument:

    open( INFO, ">", $datafile ) || die "Can't create $datafile: $!";

In this case, the filename to open is the actual string in $datafile, so
you don't have to worry about $datafile containing characters that might
influence the open mode, or whitespace at the beginning of the filename
that would be absorbed in the 2-argument version. Also, any reduction of
unnecessary string interpolation is a good thing.
-----------8<-----------

[]s

breno


Thomas Britis wrote:
> Senhores,
> 
>  Uma dúvida:
> 
> open (F, "<$file") é a mesma coisa que open (F, "<", $file) ???
> 
>  Obrigado.
> 
> --
> TCNet Informática e Telecomunicações LTDA
> Rua São João, 150 - Pouso Alegre/MG
> +55(35)3425-2556
> 
> 
>     --------- Mensagem Original --------
>     De: "Nilson Santos Figueiredo Junior" <acid06 em gmail.com>
>     Para: "Cascavel Perl Mongers" <cascavel-pm em pm.org>
>     Assunto: Re: [Cascavel-pm] Res: Perl
>     Data: 27/11/06 18:10
> 
> 
>     On 11/27/06, Nelson Ferraz <nferraz em gmail.com> wrote:
>     > Sei lá... eu ainda acho a forma "canônica" perfeitamente válida:
>     >
>     > open (FILE, $filename) or die "Can't read '$filename': $!";
> 
>     A sua forma canônica tem dois problemas (pelo menos):
>     1. open() de 2 argumentos ao invés de open() de 3 argumentos.
>     2. utilizaão de glob ao invés de um escalar.
> 
>     A forma ideal de se abrir um arquivo para leitura seria:
>     open(my $fh, '<', $filename) or die "Can't open '$filename': $!";
> 
>     (ou utilizar o equivalente em use English; do $! mas eu,
>     particularmente, não gosto muito desse modo)
> 
>     -Nilson Santos F. Jr.
>     _______________________________________________
>     Cascavel-pm mailing list
>     Cascavel-pm em pm.org <mailto:Cascavel-pm em pm.org>
>     http://mail.pm.org/mailman/listinfo/cascavel-pm
> 
> 
> 
> 
> 
> 
> 
> ________________________________________________
> TCNet WebMail http://webmail.tcnet.com.br
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm


Mais detalhes sobre a lista de discussão Cascavel-pm