[Cascavel-pm] Res: Perl
Breno G. de Oliveira
breno em clavis.com.br
Segunda Novembro 27 11:32:21 PST 2006
Apenas complementando a discussão, fiz o seguinte benchmark:
-------------8<------------
my $fh;
timethese(10000000, {
'HANDLE' => sub { open FH, '<', 'teste.txt' or die;
close(FH);
},
'$var' => sub { open $fh, '<', 'teste.txt' or die;
close($fh);
},
}
);
-------------8<------------
e o resultado foi bastante próximo:
$var: 90 wallclock secs (49.09 usr + 39.30 sys = 88.39 CPU) @
113134.97/s (n=10000000)
HANDLE: 86 wallclock secs (47.08 usr + 36.90 sys = 83.98 CPU) @
119075.97/s (n=10000000)
por outro lado, o valor piora bastante quando a declaração da variável
vai pra dentro da sub ("open my $fh, ...")
$var: 138 wallclock secs (98.48 usr + 38.47 sys = 136.95 CPU) @
73019.35/s (n=10000000)
[]s
breno
Breno G. de Oliveira wrote:
> 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
> _______________________________________________
> 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