[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