[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