[Cascavel-pm] Duvida expressao regular?
loggos em loggos.com.br
loggos em loggos.com.br
Quinta Outubro 18 11:48:42 PDT 2007
Saudações a todos.
Aproveitando as observações do Nilson, estou
testando qr para pré-compilar regex e notei que
faz muito pouca diferença, na prática.
Testaste este recurso Nilson ? O que tu achas ?
Outro detalhe é que o resultado do benchmarck não
bateu exatamente quando o programa foi rodado .
Estive lendo e parece que existe mesmo uma
diferença entre os indicadores do benchmarck e os
indicadores obtidos qdo se roda a a rotina.
Abraço.
Roberto Bisotto
Message: 5
Date: Thu, 18 Oct 2007 14:05:46 -0200
From: "Nilson Santos Figueiredo Junior"
<acid06 em gmail.com>
Subject: Re: [Cascavel-pm] Duvida expressao
regular?
To: "Cascavel Perl Mongers" <cascavel-pm em pm.org>
Message-ID:
<9a08c9b40710180905x61ed12e4v1104a187fe8e5649 em mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
On 10/18/07, Luis Motta Campos
<luismottacampos em yahoo.co.uk> wrote:
> A segunda opcao eh "/o", que quer dizer "compile
> Once" - informa o Perl
> de que a expressao regular em questao nao muda
> ao longo do programa e
> pode ser compilada apenas uma vez. Isso ajuda a
> performance do programa,
> quando voce usa expressoes regulares
> "estaticas" - que nao variam
> dependendo de outras informacoes do seu
> programa - em loops muito
> longos.
Na verdade, acho que atualmente não faz muito
sentido usar a opção /o.
Além de não prover ganhos de performance, ela é,
na verdade, um pouco
pior:
use Benchmark qw/cmpthese/;
cmpthese(5000, {
normal => sub {
for (1000..1999) { $i++ if /[13579]$/ }
},
with_o => sub {
for (1000..1999) { $i++ if /[13579]$/o }
}
} );
Resultados:
Rate normal with_o
normal 1720/s -- -2%
with_o 1758/s 2% --
-Nilson Santos F. Jr.
----- Original Message -----
From: <cascavel-pm-request em pm.org>
To: <cascavel-pm em pm.org>
Sent: Thursday, October 18, 2007 1:57 PM
Subject: Digest Cascavel-pm, volume 219, assunto 6
Enviar submissões para a lista de discussão
Cascavel-pm para
cascavel-pm em pm.org
Para se cadastrar ou descadastrar via WWW, visite
o endereço
http://mail.pm.org/mailman/listinfo/cascavel-pm
ou, via email, envie uma mensagem com a palavra
'help' no assunto ou
corpo da mensagem para
cascavel-pm-request em pm.org
Você poderá entrar em contato com a pessoa que
gerencia a lista pelo
endereço
cascavel-pm-owner em pm.org
Quando responder, por favor edite sua linha
Assunto assim ela será
mais específica que "Re: Contents of Cascavel-pm
digest..."
Tópicos de Hoje:
1. Re: Duvida expressao regular? (Luis Motta
Campos)
2. Re: Duvida expressao regular? (Alceu
Rodrigues de Freitas Junior)
3. Re: contra barra - Resolvido (Luis Motta
Campos)
4. Re: contra barra (Ricardo Stock)
5. Re: Duvida expressao regular? (Nilson Santos
Figueiredo Junior)
6. Re: Duvida expressao regular? (Alceu
Rodrigues de Freitas Junior)
----------------------------------------------------------------------
Message: 1
Date: Thu, 18 Oct 2007 15:39:18 +0200
From: Luis Motta Campos
<luismottacampos em yahoo.co.uk>
Subject: Re: [Cascavel-pm] Duvida expressao
regular?
To: Cascavel Perl Mongers <cascavel-pm em pm.org>
Message-ID: <20071018133918.GC4096 em bitbistro.com>
Content-Type: text/plain; charset=us-ascii
On Thu, Oct 18, 2007 at 10:17:39AM -0300, Patty
Silva wrote:
> Pessoal.. eu estava fazendo :
> $urls =~ s/\r//g; para retirar o ^M do final..
> so que nao funcionou.. ai vi no forum para usar
> o $urls =~ s/\r//go;
> Procurei mais nao achei o que eh o go no final..
>
> algume pode explicar??
>
Sao duas opcoes diferentes, patty.
A primeira delas, "/g", quer dizer "apply
Globbaly" - aplique quantas
vezes voce conseguir ao longo da string, retorne
uma lista de
resultados (contexto de lista) ou "o proximo"
resultado (contexto
escalar).
A segunda opcao eh "/o", que quer dizer "compile
Once" - informa o Perl
de que a expressao regular em questao nao muda ao
longo do programa e
pode ser compilada apenas uma vez. Isso ajuda a
performance do programa,
quando voce usa expressoes regulares "estaticas" -
que nao variam
dependendo de outras informacoes do seu programa -
em loops muito
longos.
Tudo isso estah no manual, e voce jah perguntou
estas coisas antes.
perldoc perlre
Putamplexos!
--
Luis Motta Campos
Perl Programmer, Hobbyist Cook and Photographer
------------------------------
Message: 2
Date: Thu, 18 Oct 2007 16:49:19 +0300
From: Alceu Rodrigues de Freitas Junior
<glasswalk3r em hotmail.com>
Subject: Re: [Cascavel-pm] Duvida expressao
regular?
To: Cascavel Perl Mongers <cascavel-pm em pm.org>
Message-ID:
<BAY121-W19071C63CF33E45CB61D2FF59E0 em phx.gbl>
Content-Type: text/plain; charset="iso-8859-1"
Eu fiz um esforço para entender o que a opção /o
ajudaria para eliminar quebras de linha do DOS...
e não cheguei a conclusão nenhuma.
Essa opção serviria para otimizar a expressão
regular, se ela usa algum tipo de interpolação.
Usar /o significa dizer para o motor "não precisa
mais recompilar a expressão regular". Isso já
gerou bastante discussão no
http://www.perlmonks.org
(http://www.perlmonks.org/?node_id=269035), vale a
pena dar uma lida.
A expressão regular para remover quebras de linha
do DOS é /\r\n/... mas se você estiver usando
ActivePerl numa máquina Windows, chomp já resolve
o problema.
[]'s
Alceu
Date: Thu, 18 Oct 2007 10:25:08 -0300
From: cromo.jml em gmail.com
To: cascavel-pm em pm.org
Subject: Re: [Cascavel-pm] Duvida expressao
regular?
Passei por esta dúvida estes dias desconhecia o
terminador o:
What is '/o' really for?
http://perldoc.perl.org/perlfaq6.html#What-is-%27/o%27-really-for%3F
Márcio Vitor
On 10/18/07, Patty Silva <
ptfzs em yahoo.com.br> wrote:Pessoal.. eu estava
fazendo :
$urls =~ s/\r//g; para retirar o ^M do final.. so
que nao funcionou.. ai vi no forum para usar o
$urls =~ s/\r//go;
Procurei mais nao achei o que eh o go no final..
algume pode explicar??
Obrigada
[]ss
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL:
http://mail.pm.org/pipermail/cascavel-pm/attachments/20071018/9fde75b2/attachment-0001.html
------------------------------
Message: 3
Date: Thu, 18 Oct 2007 16:14:31 +0200
From: Luis Motta Campos
<luismottacampos em yahoo.co.uk>
Subject: Re: [Cascavel-pm] contra barra -
Resolvido
To: Cascavel Perl Mongers <cascavel-pm em pm.org>
Message-ID: <20071018141431.GD4096 em bitbistro.com>
Content-Type: text/plain; charset=iso-8859-1
On Thu, Oct 18, 2007 at 11:26:15AM -0300, Ricardo
Stock wrote:
> Obrigado a ajuda que tive, ao igor e ao "Chomp"
>
> ficou assim o código
>
> $caminho=sprintf('local\usuario\%s', $numero);
> my $sth = $dbh->prepare( q{UPDATE usuarios
> SET caminho = ? WHERE numero = ?} );
> $sth->execute($caminho, $numero);
>
> Explicando melhor funciona assim
>
> 1 - Recebe os dados via form html (os erros de
> preenchimento são tratados
> via JS)
Eu nao devia, mas vou apontar FALHA GRAVE DE
SEGURANCA no teu sistema,
por voce confiar no JS para verificacao de erros
de preenchimento. Tome
cuidado, e trate de validar seus dados SERVER
SIDE - JS pode ser
reescrito, invalidado, ignorado e torcido de uma
infinidade de maneiras
diferentes.
E, jah que voce esta escrevendo CGI, pelo menos
diga que voce estah
usando o CGI::Application, ou , melhor ainda, o
Catalyst... ;)
> 2 - Chama função para cadastrar.
> 3 - uma vez cadastrado, como o campo numero é
> auto incrementado, faça uma
> busca pelo numero e obtenho o mesmo para fazer o
> caminho
Bom, jah que voce estah usando MySQL (espero que
seja pelo menos o 5.1 -
mas voce deveria mesmo era usar Postgres, que eh
uma base de dados
seria), use $dbi->last_insert_id() para obter o
numero do insert que
voce terminou de fazer. Assim, voce economiza um
SELECT.
> 4 - crio a pasta no local indicado pelo numero
> do usuário
> 5 - Atualizo o banco com o numero no caminho exe
> local/ususario/1234
Eu ateh tenho medo de perguntar, mas o senso do
dever fala mais alto:
Voce pode por favor me explicar para que precisa
ter uma interface web
que cadastra usuarios e associa um diretorio
server-side para cada um
deles? Isso estah me cheirando a idiosincrasia
empresaral aguda, e eu
acho que existe pelo menos uns 5 jeitos mais
limpos, elegantes e
economicos de resolver o teu problema... quer
falar mais sobre isso
antes de continuar?
> 6 - dou o retorno em html do registro.
"Retorno em html" ? Bom, outra vez, eu vou apontar
voce para o jeito
certo de fazer, meu caro... use o HTML::Template,
ou o TT (Template
Toolkit) para gerar seu HTML a partir de
templates. Desta forma, voce
mantem seu codigo longe do tipo de caca que
estraga programas com
interface web: o HTML.
Putamplexos!
--
Luis Motta Campos
Perl Programmer, Hobbyist Cook and Photographer
------------------------------
Message: 4
Date: Thu, 18 Oct 2007 12:00:33 -0300
From: "Ricardo Stock" <ricardostock em bol.com.br>
Subject: Re: [Cascavel-pm] contra barra
To: "Cascavel Perl Mongers" <cascavel-pm em pm.org>
Message-ID:
<00cf01c81197$a9983e80$0200a8c0 em Ricardo>
Content-Type: text/plain; charset="iso-8859-1"
valeu Alceu... eu havia pensado na concatenação
das variaveis, e achoq ue fica melhor assim
mesmo.... obrigado... vou dar mais uma mexida no
codigo.
----- Original Message -----
From: Alceu Rodrigues de Freitas Junior
To: Cascavel Perl Mongers
Sent: Thursday, October 18, 2007 9:17 AM
Subject: Re: [Cascavel-pm] contra barra
> Date: Thu, 18 Oct 2007 12:47:38 +0100
> From: igor.sutton em yahoo.co.uk
> Depois de fazer o que o Champs falou em outro
email,
> você pode montar facilmente o caminho assim:
>
> $caminho = sprintf('\meu\caminho\%s',
$numero);
>
> perldoc -f sprintf
> perldoc -f q
Ou então usar File::Spec para contatenar $numero
com o diretório usando a função catfile. Com isso
seu programa ainda fica mais portável.
perldoc File::Spec.
[]'s
Alceu
------------------------------------------------------------------------------
Discover the new Windows Vista Learn more!
------------------------------------------------------------------------------
_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL:
http://mail.pm.org/pipermail/cascavel-pm/attachments/20071018/1dfd638b/attachment-0001.html
------------------------------
Message: 5
Date: Thu, 18 Oct 2007 14:05:46 -0200
From: "Nilson Santos Figueiredo Junior"
<acid06 em gmail.com>
Subject: Re: [Cascavel-pm] Duvida expressao
regular?
To: "Cascavel Perl Mongers" <cascavel-pm em pm.org>
Message-ID:
<9a08c9b40710180905x61ed12e4v1104a187fe8e5649 em mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1
On 10/18/07, Luis Motta Campos
<luismottacampos em yahoo.co.uk> wrote:
> A segunda opcao eh "/o", que quer dizer "compile
> Once" - informa o Perl
> de que a expressao regular em questao nao muda
> ao longo do programa e
> pode ser compilada apenas uma vez. Isso ajuda a
> performance do programa,
> quando voce usa expressoes regulares
> "estaticas" - que nao variam
> dependendo de outras informacoes do seu
> programa - em loops muito
> longos.
Na verdade, acho que atualmente não faz muito
sentido usar a opção /o.
Além de não prover ganhos de performance, ela é,
na verdade, um pouco
pior:
use Benchmark qw/cmpthese/;
cmpthese(5000, {
normal => sub {
for (1000..1999) { $i++ if /[13579]$/ }
},
with_o => sub {
for (1000..1999) { $i++ if /[13579]$/o }
}
} );
Resultados:
Rate normal with_o
normal 1720/s -- -2%
with_o 1758/s 2% --
-Nilson Santos F. Jr.
------------------------------
Message: 6
Date: Thu, 18 Oct 2007 19:57:23 +0300
From: Alceu Rodrigues de Freitas Junior
<glasswalk3r em hotmail.com>
Subject: Re: [Cascavel-pm] Duvida expressao
regular?
To: Cascavel Perl Mongers <cascavel-pm em pm.org>
Message-ID:
<BAY121-W2087E05457C48ADE520E63F59E0 em phx.gbl>
Content-Type: text/plain; charset="iso-8859-1"
> Date: Thu, 18 Oct 2007 14:05:46 -0200
> From: acid06 em gmail.com
> On 10/18/07, Luis Motta Campos
> <luismottacampos em yahoo.co.uk> wrote:
> > A segunda opcao eh "/o", que quer dizer
> > "compile Once" - informa o Perl
> > de que a expressao regular em questao nao muda
> > ao longo do programa e
> > pode ser compilada apenas uma vez. Isso ajuda
> > a performance do programa,
> > quando voce usa expressoes regulares
> > "estaticas" - que nao variam
> > dependendo de outras informacoes do seu
> > programa - em loops muito
> > longos.
>
> Na verdade, acho que atualmente não faz muito
> sentido usar a opção /o.
> Além de não prover ganhos de performance, ela é,
> na verdade, um pouco
> pior:
>
> use Benchmark qw/cmpthese/;
>
> cmpthese(5000, {
> normal => sub {
> for (1000..1999) { $i++ if
> /[13579]$/ }
> },
> with_o => sub {
> for (1000..1999) { $i++ if
> /[13579]$/o }
> }
> } );
>
> Resultados:
>
> Rate normal with_o
> normal 1720/s -- -2%
> with_o 1758/s 2% --
Na minha máquina deu diferente:
Rate with_o normal
with_o 2064/s -- -1%
normal 2077/s 1% --
Eu executei várias vezes o teste, mas o with_o
saiu na frente a maioria das vezes. O engraçado é
que ele deveria ser melhor se houvesse algo para
interpolar na regex.
Eu achei isso estranho e resolvi fazer mais dois
testes:
<test2>
use Benchmark qw/cmpthese/;
my $string = 'foobar';
my $compiled = qr/[13579]($string)?/;
my $i;
cmpthese(
5000,
{
normal_with_text => sub {
for ( 1000 .. 1999 ) { $i++ if
/[13579]($string)?/ }
},
with_o_and_text => sub {
for ( 1000 .. 1999 ) { $i++ if
/[13579]($string)?/o }
},
compile_with_qr => sub {
for ( 1000 .. 1999 ) { $i++ if
/$compiled/ }
}
}
);
</test2>
O resultado foi mais estranho ainda:
Rate normal_with_text
with_o_and_text compile_with_qr
normal_with_text
-- -5% -18%
with_o_and_text 748/s
5% -- -14%
compile_with_qr 865/s 21%
16% --
Mais um teste:
<test3>
use Benchmark qw(cmpthese);
my $string = 'foobar';
my $compiled = qr/$string/;
my $i;
cmpthese(
200000,
{
normal_with_text => sub {
for ( a .. z ) { $i++ if /$string/ }
},
with_o_and_text => sub {
for ( a .. z ) { $i++ if /$string/o }
},
compile_with_qr => sub {
for ( a .. z ) { $i++ if /$compiled/ }
}
}
);
</test3>
E o resultado foi algo mais razoável (mas a
expressão regular foi alterada):
Rate compile_with_qr
normal_with_text with_o_and_text
compile_with_qr
-- -1% -12%
normal_with_text 90785/s
1% -- -11%
with_o_and_text 101523/s 13%
12% --
A única coisa que consigo tirar desse teste é que
é difícil afirmar qual técnica funcionará melhor.
Aparentemente dependerá também expressão regular
sendo verificada, então só testes com Benchmark
para afirmar o que funciona mais rápido.
Só para constar:
This is perl, v5.8.8 built for
MSWin32-x86-multi-thread
(with 50 registered patches, see perl -V for more
detail)
Copyright 1987-2006, Larry Wall
Binary build 820 [274739] provided by ActiveState
http://www.ActiveState.com
Built Jan 23 2007 15:57:46
Rodando em um processador Centrino Duo 1.66GHz,
com 504MB de RAM (maldita placa de vídeo!).
Se alguém mais topar rodar os testes e mandar pra
lista, pode ser interessante.
[]'s
Alceu
_________________________________________________________________
Explore the seven wonders of the world
http://search.msn.com/results.aspx?q=7+wonders+world&mkt=en-US&form=QBRE
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL:
http://mail.pm.org/pipermail/cascavel-pm/attachments/20071018/e93859ea/attachment.html
------------------------------
_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm
Fim da Digest Cascavel-pm, volume 219, assunto 6
************************************************
--
No virus found in this incoming message.
Checked by AVG Free Edition.
Version: 7.5.488 / Virus Database: 269.15.0/1077 -
Release Date: 18/10/2007 09:54
Mais detalhes sobre a lista de discussão Cascavel-pm