From frighetti em cascavel.pm.org Wed Oct 1 09:30:44 2003 From: frighetti em cascavel.pm.org (Fabiano Reese Righetti) Date: Mon Aug 2 21:26:47 2004 Subject: [Cascavel-pm] Duvida basica... In-Reply-To: <3F7A2E06.93D4B27A@dim.fm.usp.br> References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> Message-ID: <20031001113044.5554ccc6.frighetti@cascavel.pm.org> On Tue, 30 Sep 2003 20:29:42 -0500 Adriano Vivan Borro wrote: > Oi Lista, > > Estou com uma duvida bem basica aki com o perl. Ateh consegui uma saida, mas com certeza > existe alguma forma de fazer o q quero mais eficientemente. Enfim, ae vai meu problema: > > $x possui no maximo 10 caracteres > Se $x possuir menos que 10 caracteres, inserir o caractere "X " nas ultimas posicoes da > variavel, ateh completa-la com 10 caracteres > > Tks, > Adriano. > > Olá Adriano! $x .= "X"x(10-length($x)) if $_ < 10; Abraços. -- Fabiano Reese Righetti - frighetti AT {cascavel.pm.org, cpan.org} From glasswalk3r em yahoo.com.br Wed Oct 1 09:48:14 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:47 2004 Subject: [Cascavel-pm] monitoração de processamento In-Reply-To: <20030930184826.GB276@pinguim.elobo.cjb.net> Message-ID: <20031001144814.24615.qmail@web20209.mail.yahoo.com> --- Ednardo Lobo escreveu: > > Não sou um "expert" em protocolo HTTP e nem > em JavaScript, mas > conheço bem o funcionamento do protocolo e um pouco > de como o JavaScript > atua no navegador. Entretanto, tenho quase > certeza que enquanto o > navegador aguarda o retorno de uma requisição > nenhuma outro operação, > nem mesmo via JavaScript pode ser realizada no > navegador. Então acho que > usar JavaScript para gerar um status de > processamento não é a saída. Eu preferiria não usar Javascript > O servidor HTTP, entretanto, devolve a saída > do "script" acionado > via CGI, se esse estiver com o seu dispositivo de > no modo "não > bufferizado" ($| = 1), a medida que ela for sendo > gerada. Você pode se > valer disso para retornar informações ao > navegador a medida que o > "script" é processado. E essa saída poderá ser em > formado 'text/plain', > 'text/html' e até mesmo 'image/*'. Com isso, você > permitir que o usuário > acompanhe o processamento do 'script' da > maneira que achar mais > intuitiva, seja através de uma barra de progresso em > texto ou gráfica. Isso me parece melhor. > Estou certo de que isso funciona, > entretanto, não sei como o > navegador irá compor a barra de progresso, caso essa > seja uma imagem. > > Alceu, se chegar a implementar a solução que > propus, por favor, me > dê um feedback. Encontrei esse módulo no CPAN: http://www.cpan.org/authors/id/L/LG/LGODDARD/CGI-ProgressBar-0.01.readme Vou fazer um testes. Se alguém se sentir curioso, tente também! []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From lechamps em terra.com.br Wed Oct 1 10:31:49 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:47 2004 Subject: [Cascavel-pm] Duvida basica... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> Message-ID: <3F7AF365.3090203@terra.com.br> Fabiano Reese Righetti wrote: > >>$x possui no maximo 10 caracteres >>Se $x possuir menos que 10 caracteres, inserir o caractere "X " nas ultimas posicoes da >>variavel, ateh completa-la com 10 caracteres > > Olá Adriano! > > $x .= "X"x(10-length($x)) if $_ < 10; > Fabiano, me parece que tem alguma coisa faltando aqui: você não inicializou $_ com nada, e faz referência a ele... isso, dependendo de $_, pode concatenar ou não de zero a 10 "X" no final da string do Adriano... Talvez a melhor saída fosse alguma coisa assim: $x .= "X"x(10-lenght($x)) if lenght($x)<10; Ah! A propósito, lindo fragmento de código perl! =-] -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From glasswalk3r em yahoo.com.br Wed Oct 1 11:47:41 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] monitoração de processamento In-Reply-To: <20031001144814.24615.qmail@web20209.mail.yahoo.com> Message-ID: <20031001164741.19314.qmail@web20208.mail.yahoo.com> Ok, eu testei o módulo. Se alguém quiser tentar, segue abaixo o código que usei em base da documentação do módulo: #!/usr/bin/perl use warnings; use CGI::ProgressBar; use strict; my $cgi = new CGI; $| = 1; print $cgi->header; print $cgi->start_html('A Simple Example'); print $cgi->h1('A Simple Example'); print $cgi->p('This example will fill the screen with nonsense between 1 to 10'); print progress_bar ( -from =>1, -to =>10 ); for (1 .. 10) { print update_progress_bar; #print rand>0.5 ? chr 47 : chr 92 for 0 .. 100000; print '#'; sleep 1; } print hide_progress_bar; print $cgi->p('All done'); print $cgi->end_html; Eu considero o resultado simples, mas funcional. Apesar do estado ALPHA, eu não encontrei erros no módulo, e ele é muito simples de usar. Quando o autor possibilitar usar cores para criar a barra de progresso com CSS, vai ficar bem interessante. []´s Alceu --- "Alceu R. de Freitas Jr." escreveu: > --- Ednardo Lobo escreveu: > > > > Não sou um "expert" em protocolo HTTP e > nem > > em JavaScript, mas > > conheço bem o funcionamento do protocolo e um > pouco > > de como o JavaScript > > atua no navegador. Entretanto, tenho quase > > certeza que enquanto o > > navegador aguarda o retorno de uma requisição > > nenhuma outro operação, > > nem mesmo via JavaScript pode ser realizada no > > navegador. Então acho que > > usar JavaScript para gerar um status de > > processamento não é a saída. > > Eu preferiria não usar Javascript > > > O servidor HTTP, entretanto, devolve a saída > > do "script" acionado > > via CGI, se esse estiver com o seu dispositivo de > > no modo "não > > bufferizado" ($| = 1), a medida que ela for sendo > > > gerada. Você pode se > > valer disso para retornar informações ao > > navegador a medida que o > > "script" é processado. E essa saída poderá ser em > > formado 'text/plain', > > 'text/html' e até mesmo 'image/*'. Com isso, você > > permitir que o usuário > > acompanhe o processamento do 'script' da > > maneira que achar mais > > intuitiva, seja através de uma barra de progresso > em > > texto ou gráfica. > > Isso me parece melhor. > > > Estou certo de que isso funciona, > > entretanto, não sei como o > > navegador irá compor a barra de progresso, caso > essa > > seja uma imagem. > > > > Alceu, se chegar a implementar a solução que > > propus, por favor, me > > dê um feedback. > > Encontrei esse módulo no CPAN: > http://www.cpan.org/authors/id/L/LG/LGODDARD/CGI-ProgressBar-0.01.readme > > Vou fazer um testes. Se alguém se sentir curioso, > tente também! > > []´s > > > ===== > Alceu Rodrigues de Freitas Junior > -------------------------------------- > glasswalk3r@yahoo.com.br > http://www.imortais.cjb.net > ----------------------------------------------------------------------- > "You have enemies? Good. That means you've stood up > for something, sometime in your life." - Sir Winston > Churchill > > Yahoo! Mail - o melhor webmail do Brasil > http://mail.yahoo.com.br > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From falmp em terra.com.br Wed Oct 1 12:13:36 2003 From: falmp em terra.com.br (Francisco Lopes) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Duvida basica... In-Reply-To: <3F7AF365.3090203@terra.com.br> References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> Message-ID: <1369832090.20031001141336@terra.com.br> Eu também tinha notado a falta do lenght() e o uso do $_, mas resolvi testar e funcionou. Interessante, pode explicar o por quê? $_ recebe o valor da variável usada na última função ou nada a ver? Abraço. Francisco Lopes, aka pulpfiction Wednesday, October 1, 2003, 12:31:49 PM, you wrote: > Fabiano Reese Righetti wrote: > > >>>$x possui no maximo 10 caracteres >>>Se $x possuir menos que 10 caracteres, inserir o caractere "X " nas ultimas posicoes da >>>variavel, ateh completa-la com 10 caracteres >> >> Olá Adriano! >> >> $x .= "X"x(10-length($x)) if $_ < 10; >> > Fabiano, me parece que tem alguma coisa faltando aqui: você não > inicializou $_ com nada, e faz referência a ele... isso, dependendo de > $_, pode concatenar ou não de zero a 10 "X" no final da string do Adriano... > Talvez a melhor saída fosse alguma coisa assim: > $x .= "X"x(10-lenght($x)) if lenght($x)<10; > Ah! A propósito, lindo fragmento de código perl! =-] From fglock em pucrs.br Wed Oct 1 13:37:00 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Duvida basica... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> Message-ID: <3F7B1ECC.721D@pucrs.br> Francisco Lopes wrote: > > Eu também tinha notado a falta do lenght() e o uso do $_, mas resolvi > testar e funcionou. Interessante, pode explicar o por quê? $_ recebe o > valor da variável usada na última função ou nada a ver? length(), né? > > Fabiano Reese Righetti wrote: > > > > >>>$x possui no maximo 10 caracteres > >>>Se $x possuir menos que 10 caracteres, inserir o caractere "X " nas ultimas posicoes da > >>>variavel, ateh completa-la com 10 caracteres > >> > >> Olá Adriano! > >> > >> $x .= "X"x(10-length($x)) if $_ < 10; O 'x' com valor zero ou negativo não faz nada - por isso tanto faz se tem o 'if' ou não. - Flavio S. Glock From ednardo em lobosnet.com Wed Oct 1 13:40:18 2003 From: ednardo em lobosnet.com (Ednardo Lobo) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] =?iso-8859-1?Q?monitora?= =?iso-8859-1?B?5+Nv?= de processamento In-Reply-To: <20031001164741.19314.qmail@web20208.mail.yahoo.com> References: <20031001144814.24615.qmail@web20209.mail.yahoo.com> <20031001164741.19314.qmail@web20208.mail.yahoo.com> Message-ID: <20031001184018.GF276@pinguim.elobo.cjb.net> On Wed, Oct 01, 2003 at 01:47:41PM -0300, Alceu R. de Freitas Jr. wrote: > Ok, eu testei o módulo. Se alguém quiser tentar, segue abaixo o código > que usei em base da documentação do módulo: > > #!/usr/bin/perl > > use warnings; > use CGI::ProgressBar; > use strict; > > my $cgi = new CGI; > > $| = 1; > print $cgi->header; > print $cgi->start_html('A Simple Example'); > print $cgi->h1('A Simple Example'); > print $cgi->p('This example will fill the screen with > nonsense between 1 to 10'); > print progress_bar ( -from =>1, -to =>10 ); > > for (1 .. 10) { > print update_progress_bar; > #print rand>0.5 ? chr 47 : chr 92 for 0 .. 100000; > print '#'; > sleep 1; > } > > print hide_progress_bar; > print $cgi->p('All done'); > print $cgi->end_html; > > Eu considero o resultado simples, mas funcional. Apesar do estado > ALPHA, eu não encontrei erros no módulo, e ele é muito simples de > usar. Quando o autor possibilitar usar cores para criar a barra de > progresso com CSS, vai ficar bem interessante. > > []´s > Alceu Legal Alceu, Analizando sua condificação concluí que esse módulo utiliza extamente aquela técnica que lhe sugeri. E como existem módulos para tudo na PERL, era de se esperar que existisse um módulo que implementasse justamente essa funcionalidade. Obrigado por nos apresentar esse módulo! Valeu! -- Ednardo Lobo - www.elobo.cjb.net, www.lobosnet.com Por favor, evitem enviar anexos no formato MS-Office, obrigado! Veja: http://www.fsf.org/philosophy/no-word-attachments.pt.html From glasswalk3r em yahoo.com.br Wed Oct 1 14:07:08 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] monitoração de processamento In-Reply-To: <20031001184018.GF276@pinguim.elobo.cjb.net> Message-ID: <20031001190708.7921.qmail@web20210.mail.yahoo.com> --- Ednardo Lobo escreveu: > > Legal Alceu, > > Analizando sua condificação concluí que > esse módulo utiliza > extamente aquela técnica que lhe sugeri. E > como existem módulos > para tudo na PERL, era de se esperar que > existisse um módulo que > implementasse justamente essa funcionalidade. Ahn... o módulo na realidade só faz "metade" do que gostaria que fizesse. Se você tentar fazer duas requisições, uma primeiro, e a outra em seguida, vai perceber que a segunda SÓ vai ser processada quando a primeira terminar. Algo BASTANTE indesejável se você tiver 200 usuários solicitando o CGI. ;-) > Obrigado por nos apresentar esse módulo! De nada. Mas eu ainda preciso de sugestões. :-) []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From lechamps em terra.com.br Wed Oct 1 14:12:20 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Duvida basica... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> Message-ID: <3F7B2714.6020809@terra.com.br> Flavio S. Glock wrote: > Francisco Lopes wrote: > >>Eu também tinha notado a falta do lenght() e o uso do $_, mas resolvi >>testar e funcionou. Interessante, pode explicar o por quê? $_ recebe o >>valor da variável usada na última função ou nada a ver? > > > length(), né? > Coitado do Xico! Tem piedade São Glock... =-] Eu particularmente nunca acerto a ordem das letrinhas... >>> >>>>>$x possui no maximo 10 caracteres >>>>>Se $x possuir menos que 10 caracteres, inserir o caractere "X " nas ultimas posicoes da >>>>>variavel, ateh completa-la com 10 caracteres >>>> >>>> Olá Adriano! >>>> >>>> $x .= "X"x(10-length($x)) if $_ < 10; > > O 'x' com valor zero ou negativo não faz nada - por isso tanto faz se > tem o 'if' ou não. > Opa! Agora ficou interessante!! Golf neles, Flávio!! Podemos escerver assim, que funciona do mesmo jeito: $x.="X"x(10-length($x)); E, claro, isso é BEM menor e mais eficiente! =-] Vamos acender uma velinha para São Glock, que o "homi" merece! Putamplexos!! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From lechamps em terra.com.br Wed Oct 1 14:23:50 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] =?ISO-8859-1?Q?monitora=E7=E3o_de_processa?= =?ISO-8859-1?Q?mento?= References: <20031001190708.7921.qmail@web20210.mail.yahoo.com> Message-ID: <3F7B29C6.5060007@terra.com.br> Alceu R. de Freitas Jr. wrote: > --- Ednardo Lobo escreveu: > >> Legal Alceu, >> >> Analizando sua condificação concluí que >>esse módulo utiliza >>extamente aquela técnica que lhe sugeri. E >>como existem módulos >>para tudo na PERL, era de se esperar que >>existisse um módulo que >>implementasse justamente essa funcionalidade. > > > Ahn... o módulo na realidade só faz "metade" do que > gostaria que fizesse. Se você tentar fazer duas > requisições, uma primeiro, e a outra em seguida, vai > perceber que a segunda SÓ vai ser processada quando a > primeira terminar. Algo BASTANTE indesejável se você > tiver 200 usuários solicitando o CGI. ;-) > > >> Obrigado por nos apresentar esse módulo! > > > De nada. Mas eu ainda preciso de sugestões. :-) > Alceu, Eu acho que disponibilizar este tipo de funcionalidade via web é complicado sob o ponto de vista de segurança, mas aqui tem meus dois centavos: Eu penso que a sua arquitetura poderia implementar dois scripts diferentes: o primeiro inicializa o processo, em background, e retorna um número para o usuário consultar o andamento (ou redireciona o usuário para a página de consulta); O segundo script realizaria a consulta, utilizando um refresh curtinho no cabeçalho do HTML, possivelmente aceitando parâmetros diretamente da URL, para permitir uma redireção simples a partir do processo de "start-up". Desta forma, todas as requisições continuam sem estado, carregando toda a informação necessária dentro dela mesma, e você pode certamente implementar com mais facilidade. Boa sorte! Putamplexos! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From fglock em pucrs.br Wed Oct 1 15:08:25 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] monitoração de processa mento References: <20031001190708.7921.qmail@web20210.mail.yahoo.com> <3F7B29C6.5060007@terra.com.br> Message-ID: <3F7B3439.2088@pucrs.br> Luis Campos de Carvalho wrote: > > Eu acho que disponibilizar este tipo de funcionalidade via web é > complicado sob o ponto de vista de segurança, mas aqui tem meus dois > centavos: [...] > Desta forma, todas as requisições continuam sem estado, carregando > toda a informação necessária dentro dela mesma, e você pode certamente > implementar com mais facilidade. Se o processo for em Perl, ele pode escrever para um arquivo que é uma página em HTML. Desta forma, o usuário pode consultar sem interferir com o processamento, e só precisa de um único script: # gera uma página dizendo que está começando; # inicia o processamento # ... # sobrescreve a página, dizendo que já fez uma parte; # ... # termina o processamento # escreve a página pela última vez, dizendo que acabou As páginas intermediárias podem ter 'refresh' e 'no-cache', para automatizar a coisa. A vantagem disso é que a leitura da página é feita pelo servidor web, sem interferir em nada no processamento, pois isso não é um CGI. - Flavio S. Glock From vivan em dim.fm.usp.br Wed Oct 1 21:23:42 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Duvida basica... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> Message-ID: <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> Ae, lista, Valeu mesmo. Agora... Esse operador x eu, sinceramente desconheco. Procurei aki em alguns sites nao achei tb. Alguem poderia me explicar como funciona? C ele eh binario apenas, trabalha soh com strings, etc.... $x.="X"x(10-length($x)); Tks, Adriano. Luis Campos de Carvalho wrote: > Flavio S. Glock wrote: > > Francisco Lopes wrote: > > > >>Eu também tinha notado a falta do lenght() e o uso do $_, mas resolvi > >>testar e funcionou. Interessante, pode explicar o por quê? $_ recebe o > >>valor da variável usada na última função ou nada a ver? > > > > > > length(), né? > > > > Coitado do Xico! Tem piedade São Glock... =-] > Eu particularmente nunca acerto a ordem das letrinhas... > > >>> > >>>>>$x possui no maximo 10 caracteres > >>>>>Se $x possuir menos que 10 caracteres, inserir o caractere "X " nas ultimas posicoes da > >>>>>variavel, ateh completa-la com 10 caracteres > >>>> > >>>> Olá Adriano! > >>>> > >>>> $x .= "X"x(10-length($x)) if $_ < 10; > > > > O 'x' com valor zero ou negativo não faz nada - por isso tanto faz se > > tem o 'if' ou não. > > > > Opa! Agora ficou interessante!! > Golf neles, Flávio!! > > Podemos escerver assim, que funciona do mesmo jeito: > > $x.="X"x(10-length($x)); > > E, claro, isso é BEM menor e mais eficiente! =-] > Vamos acender uma velinha para São Glock, que o "homi" merece! > > Putamplexos!! > -- > =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > Luis Campos de Carvalho is Computer Scientist, > PerlMonk [SiteDocClan], Cascavel-pm Moderator, > Unix Sys Admin && Certified Oracle DBA > http://br.geocities.com/monsieur_champs/ > =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > -------------------------- > Esta mensagem foi verificada > pelo sistema de antivírus DIM e > acredita-se estar livre de Virus. > Virus data file v4295 created Sep 24 2003 From glasswalk3r em yahoo.com.br Thu Oct 2 05:38:27 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] monitoração_de_processamento In-Reply-To: <3F7B29C6.5060007@terra.com.br> Message-ID: <20031002103827.2119.qmail@web20201.mail.yahoo.com> --- Luis Campos de Carvalho escreveu: > Eu acho que disponibilizar este tipo de > funcionalidade via web é > complicado sob o ponto de vista de segurança, mas > aqui tem meus dois > centavos: Bom dia Luis, Estive tentando enxergar possíveis furos, mas devo estar com sono ainda... poderia esclarecer melhor esse ponto? Que tipo de vulnerabilidade poderia ser exposta neste caso? []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From fglock em pucrs.br Thu Oct 2 07:43:19 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Duvida basica... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> Message-ID: <3F7C1D67.3C3F@pucrs.br> Adriano Vivan Borro wrote: > > Agora... Esse operador x eu, sinceramente desconheco. Procurei aki em alguns sites nao achei > tb. Alguem poderia me explicar como funciona? C ele eh binario apenas, trabalha soh com > strings, etc.... 'x' é o multiplicador de strings: print 'teste ' x 10; teste teste teste teste teste teste teste teste teste teste - Flavio S. Glock From glasswalk3r em yahoo.com.br Thu Oct 2 08:04:48 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] =?iso-8859-1?q?vocabul=E1rio_de_refer=EAncias?= Message-ID: <20031002130448.25618.qmail@web20201.mail.yahoo.com> Olá Srs., Imagine que criei um hash, e que cada chave faça referência para um array anônimo com 4 posições. Eu quero imprimir cada chave, e todas as posições dessa chave. Consultando perldoc perldsc: foreach $chave( keys %hash) { print "$chave: @{ $hash{$family} }\n"; } Funciona perfeitamente. O problema é que não entendi o "@{ }". O que significa isso? Um loop? Como a referência aponta para um array, não seria mais natural escrever "@[ ]" ? É uma pergunta meio chata, mas odeio fazer as coisas sem entendê-las (devo ser meio chato por isso tb, hehehe). []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From fglock em pucrs.br Thu Oct 2 08:29:57 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] vocabulário de referências References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> Message-ID: <3F7C2855.1506@pucrs.br> Alceu R. de Freitas Jr. wrote: > > Olá Srs., > > Imagine que criei um hash, e que cada chave faça > referência para um array anônimo com 4 posições. Eu > quero imprimir cada chave, e todas as posições dessa > chave. > > Consultando perldoc perldsc: > > foreach $chave( keys %hash) { > > print "$chave: @{ $hash{$family} }\n"; > > } > > Funciona perfeitamente. O problema é que não entendi o > "@{ }". O que significa isso? Um loop? Como a > referência aponta para um array, não seria mais > natural escrever "@[ ]" ? Alceu: Quando se trata de estruturas de dados, o Perl utiliza {} em vez de parênteses, porque os parenteses são usados para identificar funcões. Leia isto bem devagar, porque é meio complicado: @ar transforma o conteúdo do array 'ar' em uma lista @{ar} faz a mesma coisa - transforma o conteúdo do array 'ar' em uma lista [ 1, 2 ] é utilizado para transformar uma lista em um array anônimo. @{[ 1, 2 ]} transforma uma lista em array anônimo, e o conteúdo do array anônimo de novo para lista. @[ 1, 2 ] não existe, está escrito errado. @{ $hash{$family} } interpreta o conteúdo de $hash{$family} como sendo um array, e transforma o resultado em uma lista. - Flavio S. Glock From lechamps em terra.com.br Thu Oct 2 08:37:42 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] =?ISO-8859-1?Q?monitora=E7=E3o=5Fde=5Fprocessa?= =?ISO-8859-1?Q?mento?= References: <20031002103827.2119.qmail@web20201.mail.yahoo.com> Message-ID: <3F7C2A26.7080600@terra.com.br> Alceu R. de Freitas Jr. wrote: > Bom dia Luis, > > Estive tentando enxergar possíveis furos, mas devo > estar com sono ainda... poderia esclarecer melhor esse > ponto? Que tipo de vulnerabilidade poderia ser exposta > neste caso? > Bom dia, Alceu. =-] A principal, na minha opinião, é o ataque da moda: DDoS (AKA "Distributed Deny of Service"). Se uma pessoa mal-intencionada puder disparar processos usando seu CGI, pode muito bem fazer isso MUITAS vezes. Isso faz o scheduler do linux entrar em um espiral descrescente praticamente parar de atender requisições em minutos. Claro, basta ter controle de acesso e SSL implementado para impedir este tipo de problema... mas eu não vi nada disso daqui, por isso estou bancando o paranóico de plantão. Ah! Não confie nos seus usuários apenas por que eles são funcionários: normalmente, as pessoas que atacam computadores de uma empresa ou instituição têm ou tiveram relações com esta. Acho que agora está claro... =-] Desculpe pela obscuridade da primeira mensagem. Putamplexos! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From nferraz em phperl.com Thu Oct 2 09:30:43 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] =?ISO-8859-1?Q?vocabul=E1rio_de_refer=EAnc?= =?ISO-8859-1?Q?ias?= In-Reply-To: <20031002130448.25618.qmail@web20201.mail.yahoo.com> References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> Message-ID: <3F7C3693.1090101@phperl.com> > foreach $chave( keys %hash) { > > print "$chave: @{ $hash{$family} }\n"; > > } > > Funciona perfeitamente. O problema é que não entendi o > "@{ }". O que significa isso? Você tem um hash como este: my %arr = ( 'chave 1' => [1,2,3,4], 'chave 2' => [5,6,7,8], 'chave 3' => [9,0,1,2] ); Observe que cada chave aponta não para um valor, mas para uma referência. Portanto, se você tentar imprimir o valor diretamente, vai obter algo como: print $arr{'chave 1'}; ARRAY(0x813aa8c) Para obter o array, você deve "de-referenciá-lo", o que pode ser feito através da expressão @{$referencia} print @{$arr{'chave 1'}}; 1234 Em outras palavras, você está dizendo ao Perl para interpretar aquele valor como um array. (Isto é necessário porque você poderia estar querendo lidar diretamente com a referência!) -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From lechamps em terra.com.br Thu Oct 2 09:33:40 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: =?ISO-8859-1?Q?vocabul=E1rio_de_re?= =?ISO-8859-1?Q?fer=EAncias?= References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> Message-ID: <3F7C3744.1090101@terra.com.br> Alceu R. de Freitas Jr. wrote: > Olá Srs., > > Imagine que criei um hash, e que cada chave faça > referência para um array anônimo com 4 posições. Eu > quero imprimir cada chave, e todas as posições dessa > chave. > > Consultando perldoc perldsc: > > foreach $chave( keys %hash) { > > print "$chave: @{ $hash{$family} }\n"; > > } > Gente, eu não resisto!!! GOLF!!!!! print map "$_: @{$h{$_}}\n", keys %h; Faz a mesma coisa que os 69 caracteres da primeira versão, mas tem apenas 38 caracteres... =-] Alguém teria a bondade de fazer a próxima "jogada", e "enxugar" o problema um pouquinho mais? Putamplexos! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From nferraz em phperl.com Thu Oct 2 10:10:32 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: =?ISO-8859-1?Q?vocabul=E1rio_de_re?= =?ISO-8859-1?Q?fer=EAncias?= In-Reply-To: <3F7C3744.1090101@terra.com.br> References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> <3F7C3744.1090101@terra.com.br> Message-ID: <3F7C3FE8.1060303@phperl.com> Luis Campos de Carvalho wrote: > Alceu R. de Freitas Jr. wrote: > >> Olá Srs., >> >> Imagine que criei um hash, e que cada chave faça >> referência para um array anônimo com 4 posições. Eu >> quero imprimir cada chave, e todas as posições dessa >> chave. >> >> Consultando perldoc perldsc: >> >> foreach $chave( keys %hash) { >> print "$chave: @{ $hash{$family} }\n"; >> >> } >> > > Gente, eu não resisto!!! > GOLF!!!!! > > print map "$_: @{$h{$_}}\n", keys %h; A mesma coisa, com um caractere a menos: print "$_: @{$h{$_}}\n" for keys %h; :) -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From fglock em pucrs.br Thu Oct 2 10:33:35 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: vocabulário de re ferências References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> <3F7C3744.1090101@terra.com.br> Message-ID: <3F7C454F.79E8@pucrs.br> Luis Campos de Carvalho wrote: > > Alceu R. de Freitas Jr. wrote: > > Olá Srs., > > > > Imagine que criei um hash, e que cada chave faça > > referência para um array anônimo com 4 posições. Eu > > quero imprimir cada chave, e todas as posições dessa > > chave. > > > > Consultando perldoc perldsc: > > > > foreach $chave( keys %hash) { > > > > print "$chave: @{ $hash{$family} }\n"; > > > > } > > > > Gente, eu não resisto!!! > GOLF!!!!! > > print map "$_: @{$h{$_}}\n", keys %h; > > Faz a mesma coisa que os 69 caracteres da primeira versão, mas tem > apenas 38 caracteres... =-] > > Alguém teria a bondade de fazer a próxima "jogada", e "enxugar" o > problema um pouquinho mais? > Putamplexos! Pode usar truques sujos? %h = ( a=>[1,2,3], b=>[7,8,9] ); print map"$_:@$_\n",%h; a: ARRAY(0x15d7c24):1 2 3 b: ARRAY(0x15d7d50):7 8 9 - Flavio S. Glock From glasswalk3r em yahoo.com.br Thu Oct 2 12:02:33 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] monitoração_de_processamento In-Reply-To: <3F7C2A26.7080600@terra.com.br> Message-ID: <20031002170233.74778.qmail@web20201.mail.yahoo.com> --- Luis Campos de Carvalho escreveu: > A principal, na minha opinião, é o ataque da > moda: DDoS (AKA > "Distributed Deny of Service"). Ah sim... isso me lembra do velho script "Dust": era divertido parar máquinas com windows 95/98 rodando ele. :-). Mas eu fazia isso em rede local! (antes que me atirem pedras!) > Claro, basta ter controle de acesso e SSL > implementado para impedir > este tipo de problema... mas eu não vi nada disso > daqui, por isso estou > bancando o paranóico de plantão. Bem, eu vou jogar algo meu off-topic, mas já que estamos falando sobre DOS e DDOS: http://www.nuclearelephant.com/projects/dosevasive/ Esse módulo do Apache é muito interessante para lidar com isso. > Ah! Não confie nos seus usuários apenas por que > eles são > funcionários: normalmente, as pessoas que atacam > computadores de uma > empresa ou instituição têm ou tiveram relações com > esta. Isso é tão comum que acontece até aqui (rs)... O único tratamento específico via Perl que vi para DOS e DDOS era limitar o tamanho dos uploads via CGI.pm.... algum outro método? []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From lechamps em terra.com.br Thu Oct 2 12:06:18 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: =?ISO-8859-1?Q?vocabul=E1rio_de_re?= =?ISO-8859-1?Q?__fer=EAncias?= References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> <3F7C3744.1090101@terra.com.br> <3F7C454F.79E8@pucrs.br> Message-ID: <3F7C5B0A.90002@terra.com.br> Flavio S. Glock wrote: > Luis Campos de Carvalho wrote: > Aqui está o problema: >>Alceu R. de Freitas Jr. wrote: >>>Imagine que criei um hash, e que cada chave faça >>>referência para um array anônimo com 4 posições. Eu >>>quero imprimir cada chave, e todas as posições dessa >>>chave. > Pode usar truques sujos? > > %h = ( a=>[1,2,3], b=>[7,8,9] ); > print map"$_:@$_\n",%h; > > a: > ARRAY(0x15d7c24):1 2 3 > b: > ARRAY(0x15d7d50):7 8 9 > O truque não é apenas sujo: IMHO, você não resolveu o problema, está imprimindo muito mais informação do que o necessário; Fora isso, eu não consegui fazer seu código rodar... talvez tenha alguma coisa errada com a de-referencia do escalar, em @$_... Eu de novo: perl -l 'print"$_:$h{$_}"for keys%h' E continuo na frente, com 26 caracteres... =-] Alceu: será que você conseguiria uma "amostra" do seu hash para a turma se inspirar? =-] Quem sabe a gente consegue mais jogadores... {"São" Glock, Fabiano}: Que tal publicar um conjunto de regras básicas para jogar golf na página do {Brasil,Cascavel}.pm.org? Será que alguém teria outra jogada para fazer? -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From lechamps em terra.com.br Thu Oct 2 12:17:50 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: =?ISO-8859-1?Q?vocabul=E1rio_de_re?= =?ISO-8859-1?Q?__fer=EAncias?= References: <20031002130448.25618.qmail@web20201.mail.yahoo.com> <3F7C3744.1090101@terra.com.br> <3F7C454F.79E8@pucrs.br> <3F7C5B0A.90002@terra.com.br> Message-ID: <3F7C5DBE.8070602@terra.com.br> Luis Campos de Carvalho wrote: > Flavio S. Glock wrote: > >> Luis Campos de Carvalho wrote: >> > > Aqui está o problema: > >>> Alceu R. de Freitas Jr. wrote: >>> >>>> Imagine que criei um hash, e que cada chave faça >>>> referência para um array anônimo com 4 posições. Eu >>>> quero imprimir cada chave, e todas as posições dessa >>>> chave. >>> > >> Pode usar truques sujos? >> >> %h = ( a=>[1,2,3], b=>[7,8,9] ); print map"$_:@$_\n",%h; >> a: >> ARRAY(0x15d7c24):1 2 3 >> b: >> ARRAY(0x15d7d50):7 8 9 >> > > O truque não é apenas sujo: IMHO, você não resolveu o problema, está > imprimindo muito mais informação do que o necessário; Fora isso, eu não > consegui fazer seu código rodar... talvez tenha alguma coisa errada com > a de-referencia do escalar, em @$_... > > Eu de novo: > > perl -l 'print"$_:$h{$_}"for keys%h' Opa! Precisa de 3 bytes a mais: perl -l 'print"$_:@{$h{$_}}"for keys%h' A melhor(?) jogada até agora, com 29 caracteres... =-] "São" Glock, salta aí um 'milagre' no capricho! =-] Gente, a gente precisa deste "for" ou "map" para fazer isso? Putamplexos! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From glasswalk3r em yahoo.com.br Thu Oct 2 12:28:58 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: vocabulário_de_re__ferências In-Reply-To: <3F7C5B0A.90002@terra.com.br> Message-ID: <20031002172858.32148.qmail@web20210.mail.yahoo.com> Vocês estão muito rápidos: eu nem tive tempo de responder as outras mensagens relacionadas ao assunto. De qualquer forma, vou fazer uma pequena interrupção ao jogo de golf(?) e lançar uma perguntinha polêmica: até que ponto vale a pena matar a legibilidade para economizar míseros 5 ou 6 caracteres? IHMO (ahá, isso que eu chamo de otimização! abreviaturas!), o custo um pouco maior de memória é bem mais barato que minutos ou horas dispensadas de um analista tentando entender o código alheio... Voltando ao ponto de referências, todas as respostas anteriores foram ótimas, obrigado. Mas ainda ficou uma dúvida: foreach (keys(%users)) { print OUT "$_: @{ $users{$_} }\n"; } Se que quizesse imprimir o counteúdo de cada valor do array referenciado dentro de uma tag html, por exemplo , como eu faria? []´s Alceu --- Luis Campos de Carvalho escreveu: > > > O truque não é apenas sujo: IMHO, você não > resolveu o problema, está > imprimindo muito mais informação do que o > necessário; Fora isso, eu não > consegui fazer seu código rodar... talvez tenha > alguma coisa errada com > a de-referencia do escalar, em @$_... > > Eu de novo: > > perl -l 'print"$_:$h{$_}"for keys%h' > > E continuo na frente, com 26 caracteres... =-] > > Alceu: será que você conseguiria uma "amostra" do > seu hash para a > turma se inspirar? =-] Quem sabe a gente consegue > mais jogadores... > > {"São" Glock, Fabiano}: Que tal publicar um > conjunto de regras > básicas para jogar golf na página do > {Brasil,Cascavel}.pm.org? > > Será que alguém teria outra jogada para fazer? > -- ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From fglock em pucrs.br Thu Oct 2 15:05:00 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: vocabulário_de_re__ferências References: <20031002172858.32148.qmail@web20210.mail.yahoo.com> Message-ID: <3F7C84EC.443@pucrs.br> Alceu R. de Freitas Jr. wrote: > > Vocês estão muito rápidos: eu nem tive tempo de > responder as outras mensagens relacionadas ao assunto. > > De qualquer forma, vou fazer uma pequena interrupção > ao jogo de golf(?) e lançar uma perguntinha polêmica: > até que ponto vale a pena matar a legibilidade para > economizar míseros 5 ou 6 caracteres? > > IHMO (ahá, isso que eu chamo de otimização! > abreviaturas!), o custo um pouco maior de memória é > bem mais barato que minutos ou horas dispensadas de um > analista tentando entender o código alheio... > > Voltando ao ponto de referências, todas as respostas > anteriores foram ótimas, obrigado. Mas ainda ficou uma > dúvida: > > foreach (keys(%users)) { > print OUT "$_: @{ $users{$_} }\n"; > } > > Se que quizesse imprimir o counteúdo de cada valor do > array referenciado dentro de uma tag html, por exemplo > , como eu faria? 1 - usaria um módulo de template 2 - faria um 'for' interno e imprimiria cada um separadamente 3 - usaria um 'map': print OUT "$_: ", ( map "$_ ", @{ $users{$_} } ), "\n"; - Flavio S. Glock From nferraz em phperl.com Thu Oct 2 18:43:43 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: =?ISO-8859-1?Q?vocabul=E1rio=5Fde=5Fre?= =?ISO-8859-1?Q?=5F=5Ffer=EAncias?= In-Reply-To: <20031002172858.32148.qmail@web20210.mail.yahoo.com> References: <20031002172858.32148.qmail@web20210.mail.yahoo.com> Message-ID: <3F7CB82F.80002@phperl.com> > Vocês estão muito rápidos: eu nem tive tempo de > responder as outras mensagens relacionadas ao assunto. > > De qualquer forma, vou fazer uma pequena interrupção > ao jogo de golf(?) e lançar uma perguntinha polêmica: > até que ponto vale a pena matar a legibilidade para > economizar míseros 5 ou 6 caracteres? Tem razão! Definitivamente, não vale a pena. Tenha em mente que o "golf" é apenas um exercício para tentar levar a linguagem ao limite. (Se bem que alguns dos truques que aprendemos definitivamente podem ser usados na prática...) > Voltando ao ponto de referências, todas as respostas > anteriores foram ótimas, obrigado. Mas ainda ficou uma > dúvida: > > foreach (keys(%users)) { > print OUT "$_: @{ $users{$_} }\n"; > } > > Se que quizesse imprimir o counteúdo de cada valor do > array referenciado dentro de uma tag html, por exemplo > , como eu faria? Neste caso eu faria algo assim: print "$_: $_\n" foreach @users; # já de-referenciado Em outras palavras, imprima "$_: $_\n" para cada um dos elementos do array. Este loop vai dentro do outro: foreach (keys(%users)) { my @users = @{$users{$_}}; print "$_: $_\n" foreach @users; } Finalmente, para evitar confusões com variáveis implícitas ($_), é conveniente dar nome à variável do loop externo: foreach my $user (keys(%users)) { my @users = @{$users{$user}}; print "$_: $_\n" foreach @users; } Se você quiser, pode fazer o mesmo em apenas uma linha: print "$_: " , map("$_", @{$users{$_}}), "\n" foreach keys(%users); -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From nferraz em phperl.com Thu Oct 2 18:51:35 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Golf]: =?ISO-8859-1?Q?vocabul=E1rio=5Fde=5Fre?= =?ISO-8859-1?Q?=5F=5Ffer=EAncias?= In-Reply-To: <3F7CB82F.80002@phperl.com> References: <20031002172858.32148.qmail@web20210.mail.yahoo.com> <3F7CB82F.80002@phperl.com> Message-ID: <3F7CBA07.3010703@phperl.com> >> Se que quizesse imprimir o counteúdo de cada valor do >> array referenciado dentro de uma tag html, por exemplo >> , como eu faria? > > Neste caso eu faria algo assim: Ops, mandei o exemplo sem verificar se estava certo. :( O correto seria: foreach my $user (keys %users) { my @users = @{$users{$user}}; print "$user: ", map ("$_",@users), "\n"; } O one-liner estava ok. :) -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From vivan em dim.fm.usp.br Fri Oct 3 18:02:35 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> Message-ID: <3F7E000B.AC0EF17B@dim.fm.usp.br> Oi, lista. Esse continua sendo basico, mas enfim... Nao sei c estou certo, mas pelo que verifiquei na documentacao, a funcao sort() do Perl ordena apenas arrays. Eu preciso ordenar uma lista. O que posso usar para isso? Explicando melhor o meu problema... Digamos que tenho uma lista de nomes. E a cada execucao da minha rotina, leio apenas 1 nome. Ae, apos o script ler todo meu arquivo de entrada, me retorne os nomes ordenados e qtos vezes apareceu o mesmo nome. Bem.. Nao sei c me expressei muito bem. Vejamos entao um exemplo pratico: Arquivo de Entrada: Joseh Claudia Joseh Lucia Adriano Maneh Claudia Lucia Joseh Joseh Maneh Arquivo de Saida: Adriano 1 Claudia 2 Lucia 2 Joseh 4 Maneh 2 Gostaria d nao usar sort com arrays, justamente pq minha lista eh muito grande e pode tornar o procedimento ineficiente. Tks. From fglock em pucrs.br Fri Oct 3 16:41:06 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> <3F7E000B.AC0EF17B@dim.fm.usp.br> Message-ID: <3F7DECF2.7A82@pucrs.br> Adriano Vivan Borro wrote: > > Oi, lista. > > Esse continua sendo basico, mas enfim... Nao sei c estou certo, mas pelo que verifiquei na > documentacao, a funcao sort() do Perl ordena apenas arrays. Eu preciso ordenar uma lista. O que > posso usar para isso? > > Explicando melhor o meu problema... Digamos que tenho uma lista de nomes. E a cada execucao da > minha rotina, leio apenas 1 nome. Ae, apos o script ler todo meu arquivo de entrada, me retorne > os nomes ordenados e qtos vezes apareceu o mesmo nome. > > Bem.. Nao sei c me expressei muito bem. Vejamos entao um exemplo pratico: > > Arquivo de Entrada: > > Joseh > Claudia > Joseh > Lucia > Adriano > Maneh > Claudia > Lucia > Joseh > Joseh > Maneh > > Arquivo de Saida: > > Adriano 1 > Claudia 2 > Lucia 2 > Joseh 4 > Maneh 2 > > Gostaria d nao usar sort com arrays, justamente pq minha lista eh muito grande e pode tornar o > procedimento ineficiente. - em uma linha: perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort keys %h ' lista Adriano 1 Claudia 2 Joseh 4 Lucia 2 Maneh 2 - 'lista' é o nome do arquivo, com um nome por linha; - a variável %h é um índice de nomes, e guarda o número de ocorrências, utilizando ++. - o espaço em memória é ocupado somente uma vez por cada nome; - depois que acaba o arquivo (while), o índice é ordenado (sort), formatado (map) e impresso (print). - Flavio S. Glock From nferraz em phperl.com Sat Oct 4 13:46:00 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... In-Reply-To: <3F7DECF2.7A82@pucrs.br> References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> <3F7E000B.AC0EF17B@dim.fm.usp.br> <3F7DECF2.7A82@pucrs.br> Message-ID: <3F7F1568.1010009@phperl.com> >>Arquivo de Entrada: >> >>Joseh >>Claudia >>Joseh >>Lucia >>Adriano >>Maneh >>Claudia >>Lucia >>Joseh >>Joseh >>Maneh >> >>Arquivo de Saida: >> >>Adriano 1 >>Claudia 2 >>Lucia 2 >>Joseh 4 >>Maneh 2 > > - em uma linha: > > perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort Permita-me apenas desenvolver um pouco mais a explicação. Sempre que você encontrar um problema deste tipo, calcular a quantidade de cada item em uma lista, você deve pensar automaticamente em um hash. foreach (@nome) { $count{$_}++; } Após este loop você terá a seguinte estrutura: %count = ( 'Lucia => 2, 'Adriano' => 1, 'Joseh' => 4, etc. ); No exemplo do Flavio Glock, ele está obtendo as informações diretamente da entrada padrão: while (<>) { chomp; $count{$_}++; } O próximo passo é ordenar o hash por valor: @keys = sort { $count{$a} cmp $count{$b} } keys %count; http://www.perldoc.com/perl5.8.0/pod/perlfaq4.html#How-do-I-sort-a-hash-(optionally-by-value-instead-of-key)- E então, imprimir os resultados: foreach (@keys) { print "$_\t$count{$_}\n"; } -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From vivan em dim.fm.usp.br Mon Oct 6 15:11:55 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> <3F7E000B.AC0EF17B@dim.fm.usp.br> <3F7DECF2.7A82@pucrs.br> <3F7F1568.1010009@phperl.com> Message-ID: <3F81CC8B.39E02E13@dim.fm.usp.br> Gente, Valeu mesmo. Vou ter q estudar melhor os hash's, pq nao sei c entendi direito isso. Ainda nao cheguei nesse nivel. hehehehhehehehhehe. Qqer coisa, dou mais um grito aki. Tks, Adriano. Nelson Ferraz wrote: > >>Arquivo de Entrada: > >> > >>Joseh > >>Claudia > >>Joseh > >>Lucia > >>Adriano > >>Maneh > >>Claudia > >>Lucia > >>Joseh > >>Joseh > >>Maneh > >> > >>Arquivo de Saida: > >> > >>Adriano 1 > >>Claudia 2 > >>Lucia 2 > >>Joseh 4 > >>Maneh 2 > > > > - em uma linha: > > > > perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort > > Permita-me apenas desenvolver um pouco mais a explicação. > > Sempre que você encontrar um problema deste tipo, calcular a quantidade > de cada item em uma lista, você deve pensar automaticamente em um hash. > > foreach (@nome) { > $count{$_}++; > } > > Após este loop você terá a seguinte estrutura: > > %count = ( > 'Lucia => 2, > 'Adriano' => 1, > 'Joseh' => 4, > etc. > ); > > No exemplo do Flavio Glock, ele está obtendo as informações diretamente > da entrada padrão: > > while (<>) { > chomp; > $count{$_}++; > } > > O próximo passo é ordenar o hash por valor: > > @keys = sort { > $count{$a} cmp $count{$b} > } keys %count; > > http://www.perldoc.com/perl5.8.0/pod/perlfaq4.html#How-do-I-sort-a-hash-(optionally-by-value-instead-of-key)- > > E então, imprimir os resultados: > > foreach (@keys) { > print "$_\t$count{$_}\n"; > } > > -- > []s > > Nelson > > ________________________________________________________________ > Nelson Ferraz > > GNU BIS: http://www.gnubis.com.br > PhPerl: http://www.phperl.com > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > -------------------------- > Esta mensagem foi verificada > pelo sistema de antivírus DIM e > acredita-se estar livre de Virus. > Virus data file v4296 created Oct 01 2003 From lechamps em terra.com.br Mon Oct 6 13:27:16 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de =?iso-8859-1?q?Autentica=E7=E3o_Vers=E1til_e_Au?= =?iso-8859-1?q?to-Extens=EDvel?= Message-ID: <3F81B404.3030503@terra.com.br> Irmãos monges Eu estou construindo uma API para autenticação na empresa, que inicalmente deverá utilizar POP3, IMAP, LDAP, CGI ou DBI para obter informações de autenticação de um usuário. Se alguém se interessar em olhar, eu tenho um UML feio, desenhado em papel-de-pão, que posso enviar por email, como imagem tiff ou gif. Eu pensei em uma estrutura orientada a objetos, assim: Auth.pm | |--> Auth::DBI |--> Auth::POP |--> Auth::IMAP |--> Auth::CGI |--> Auth::HTTP |--> Auth::LDAP Auth.pm é o meu "objeto principal" e todos os outros são "objetos delegados", especializados na autenticação por um determinado método. Agora, meu problema: Eu quero poder escrever apenas __PERL__ use Auth; my $auth = new Auth( 'POP:servidor' ); die "Invalido" unless $auth->check( 'nome', 'senha' ); print "Valido"; __END__ e gostaria que isso funcionasse em qualquer situação. Mas existem pequenos problemas. Por exemplo, o LDAP precisa de mais informação do que isso para funcionar. Da mesma forma, o DBI e o CGI também precisarão. Como codificar isso tudo em um URI fácil de usar e simples de resolver? *** *** *** No mesmo contexto, eu gostaria que o objeto Auth fosse capaz de reconhecer quais extensões estão disponíveis em disco em um determinado instante. Existe alguma forma padronizada de verificar se um determinado tipo de objeto não-carregado em memória pode ser carregado (use Auth::MyAuth;) em um determinado instante, em carregar o objeto? Eu gostaria muito que a solução independesse da localização física dos arquivos, já que posso ter partes da subárvore de objetos auth em locais diferentes (no $PERL_LIB/site-local e no meu ~/perl/lib, por exemplo). Soluções pré-fabricadas e módulos prontos são muito benvindos. Obrigado a todos! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From daniel em ruoso.com Mon Oct 6 15:02:40 2003 From: daniel em ruoso.com (Daniel Ruoso) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de =?ISO-8859-1?Q?Autentica=E7=E3o?= =?ISO-8859-1?Q?_Vers=E1til?= e =?ISO-8859-1?Q?Auto-Extens=EDvel?= In-Reply-To: <3F81B404.3030503@terra.com.br> References: <3F81B404.3030503@terra.com.br> Message-ID: <1065470560.5337.5.camel@guarani> Olá... Foi uma boa coincidência ter entrado na lista logo hoje. Sou o mantenedor do Perl Oak, que é uma biblioteca de componentes para desenvolvimento de aplicações, não só, mas também web. E uma das partes do Oak é o AAS, que se traduz por Oak Authentication and Authorization Service. Como ele é: Ele é separado em duas partes. Uma é o Oak::AAS::Session, que é utilizado diretamente pelo software que quer implementar autenticação, e a outra parte é o Oak::AAS::Service, que é quem implementa a autenticação e autorização em si. No Oak::AAS::Session se configura qual o serviço de Autenticação a ser utilizado, que nada mais é do que alguma implementação de Oak::AAS::Service. Quem quiser ver mais sobre o Oak, que implementa algumas áreas da implementação de sistema, pode acessar o site http://perl-oak.sourceforge.net. Se alguém gostar e quiser colaborar é muito bem vindo. Em Seg, 2003-10-06 às 15:27, Luis Campos de Carvalho escreveu: > Irmãos monges > > Eu estou construindo uma API para autenticação na empresa, que > inicalmente deverá utilizar POP3, IMAP, LDAP, CGI ou DBI para obter > informações de autenticação de um usuário. > > Se alguém se interessar em olhar, eu tenho um UML feio, desenhado em > papel-de-pão, que posso enviar por email, como imagem tiff ou gif. > > Eu pensei em uma estrutura orientada a objetos, assim: > > Auth.pm > | > |--> Auth::DBI > |--> Auth::POP > |--> Auth::IMAP > |--> Auth::CGI > |--> Auth::HTTP > |--> Auth::LDAP > > Auth.pm é o meu "objeto principal" e todos os outros são "objetos > delegados", especializados na autenticação por um determinado método. > > Agora, meu problema: > > Eu quero poder escrever apenas > > __PERL__ > use Auth; > > my $auth = new Auth( 'POP:servidor' ); > die "Invalido" > unless $auth->check( 'nome', 'senha' ); > print "Valido"; > __END__ > > e gostaria que isso funcionasse em qualquer situação. Mas existem > pequenos problemas. Por exemplo, o LDAP precisa de mais informação do > que isso para funcionar. Da mesma forma, o DBI e o CGI também > precisarão. Como codificar isso tudo em um URI fácil de usar e simples > de resolver? > > *** *** *** > > No mesmo contexto, eu gostaria que o objeto Auth fosse capaz de > reconhecer quais extensões estão disponíveis em disco em um determinado > instante. Existe alguma forma padronizada de verificar se um determinado > tipo de objeto não-carregado em memória pode ser carregado (use > Auth::MyAuth;) em um determinado instante, em carregar o objeto? > > Eu gostaria muito que a solução independesse da localização física > dos arquivos, já que posso ter partes da subárvore de objetos auth em > locais diferentes (no $PERL_LIB/site-local e no meu ~/perl/lib, por > exemplo). > > Soluções pré-fabricadas e módulos prontos são muito benvindos. > > Obrigado a todos! -- Atenciosamente, Daniel Ruoso Desenvolvimento de Sistemas daniel@oktiva.com.br Oktiva Telecomunicaes e Informtica From nferraz em phperl.com Mon Oct 6 13:55:12 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de =?ISO-8859-1?Q?Autentica=E7=E3?= =?ISO-8859-1?Q?o_Vers=E1til_e_Auto-Extens=EDvel?= In-Reply-To: <3F81B404.3030503@terra.com.br> References: <3F81B404.3030503@terra.com.br> Message-ID: <3F81BA90.200@phperl.com> Luis Campos de Carvalho wrote: > e gostaria que isso funcionasse em qualquer situação. Mas existem > pequenos problemas. Por exemplo, o LDAP precisa de mais informação do > que isso para funcionar. Da mesma forma, o DBI e o CGI também > precisarão. Como codificar isso tudo em um URI fácil de usar e simples > de resolver? Você poderia passar estas informacões usando um hash: my $auth = new Auth ( type => "DBI", db_name => "test", db_host => "localhost" ); Se você quiser muito usar uma string, pode usar uma estrutura como esta: "type:DBI db_name:test db_host:localhost" Aí é só transformar a string em um hash. -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From vivan em dim.fm.usp.br Mon Oct 6 16:14:53 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> <3F7E000B.AC0EF17B@dim.fm.usp.br> <3F7DECF2.7A82@pucrs.br> <3F7F1568.1010009@phperl.com> Message-ID: <3F81DB4D.C74BB049@dim.fm.usp.br> Bem... O hash possui apenas 1 indice ( eh isso mesmo ??? ). Como faco entao pra estar ordenando um arquivo com, digamos... 4 colunas. Estou querendo montar um Banco de dados para trata-lo usando perl..... tks []'s Nelson Ferraz wrote: > >>Arquivo de Entrada: > >> > >>Joseh > >>Claudia > >>Joseh > >>Lucia > >>Adriano > >>Maneh > >>Claudia > >>Lucia > >>Joseh > >>Joseh > >>Maneh > >> > >>Arquivo de Saida: > >> > >>Adriano 1 > >>Claudia 2 > >>Lucia 2 > >>Joseh 4 > >>Maneh 2 > > > > - em uma linha: > > > > perl -e ' while(<>){ chomp; $h{$_}++ }; print map { "$_ $h{$_}\n" } sort > > Permita-me apenas desenvolver um pouco mais a explicação. > > Sempre que você encontrar um problema deste tipo, calcular a quantidade > de cada item em uma lista, você deve pensar automaticamente em um hash. > > foreach (@nome) { > $count{$_}++; > } > > Após este loop você terá a seguinte estrutura: > > %count = ( > 'Lucia => 2, > 'Adriano' => 1, > 'Joseh' => 4, > etc. > ); > > No exemplo do Flavio Glock, ele está obtendo as informações diretamente > da entrada padrão: > > while (<>) { > chomp; > $count{$_}++; > } > > O próximo passo é ordenar o hash por valor: > > @keys = sort { > $count{$a} cmp $count{$b} > } keys %count; > > http://www.perldoc.com/perl5.8.0/pod/perlfaq4.html#How-do-I-sort-a-hash-(optionally-by-value-instead-of-key)- > > E então, imprimir os resultados: > > foreach (@keys) { > print "$_\t$count{$_}\n"; > } > > -- > []s > > Nelson > > ________________________________________________________________ > Nelson Ferraz > > GNU BIS: http://www.gnubis.com.br > PhPerl: http://www.phperl.com > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > -------------------------- > Esta mensagem foi verificada > pelo sistema de antivírus DIM e > acredita-se estar livre de Virus. > Virus data file v4296 created Oct 01 2003 From glasswalk3r em yahoo.com.br Mon Oct 6 16:18:50 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de Autenticação_Versátil_e_Auto-Extensível In-Reply-To: <3F81B404.3030503@terra.com.br> Message-ID: <20031006211850.54633.qmail@web20203.mail.yahoo.com> --- Luis Campos de Carvalho escreveu: > > Irmãos monges Amém irmão... (desculpe, é sem sentido escrever isso, mas eu não resisti...) > Eu estou construindo uma API para autenticação na > empresa, que > inicalmente deverá utilizar POP3, IMAP, LDAP, CGI ou > DBI para obter > informações de autenticação de um usuário. Se não me fale a memória, já existem módulos que realizam isso no CPAN, não tem? Pelo menos eu vi em algum lugar ferramentas interessantes para trabalhar com LDAP... em algum lugar entre freecode.linuxsecurity.com.br ou www.perl.com... :) > Se alguém se interessar em olhar, eu tenho um UML > feio, desenhado em > papel-de-pão, que posso enviar por email, como > imagem tiff ou gif. Poderia mandar pra mim? Não que eu manje horrores de UML, mas vai ser o primeiro diagrama que analiso para um programa em Perl de qualquer forma. > Agora, meu problema: > > Eu quero poder escrever apenas > > __PERL__ > use Auth; > > my $auth = new Auth( 'POP:servidor' ); > die "Invalido" > unless $auth->check( 'nome', 'senha' ); > print "Valido"; > __END__ > > e gostaria que isso funcionasse em qualquer > situação. Mas existem > pequenos problemas. Por exemplo, o LDAP precisa de > mais informação do > que isso para funcionar. Da mesma forma, o DBI e o > CGI também > precisarão. Como codificar isso tudo em um URI fácil > de usar e simples > de resolver? Taí um problema interessante... a autenticação poderia ser garantida se o cliente armazenasse as informações que faltam (não-tão sensíveis assim espero) em cookies... ou então você poderia guardar isso de uma forma criptografada e usar um applet em Java para obter essas informações e fornecer isso ao CGI (eca, foi só uma idéia!) > No mesmo contexto, eu gostaria que o objeto Auth > fosse capaz de > reconhecer quais extensões estão disponíveis em > disco em um determinado > instante. Existe alguma forma padronizada de > verificar se um determinado > tipo de objeto não-carregado em memória pode ser > carregado (use > Auth::MyAuth;) em um determinado instante, em > carregar o objeto? Não faço idéia. Desculpe. :-( > Eu gostaria muito que a solução independesse da > localização física > dos arquivos, já que posso ter partes da subárvore > de objetos auth em > locais diferentes (no $PERL_LIB/site-local e no meu > ~/perl/lib, por > exemplo). Partindo do princípio que a informação tem que ser armazenada em algum local... talvez fosse interessante usar um arquivo texto dando o local dos objetos, ou uma base DBM, etc... Talvez as famosas variáveis de ambiente? Elas poderia ser definidas na instalação do módulos, e recriadas a cada reinicialização do servidor... []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From glasswalk3r em yahoo.com.br Mon Oct 6 16:34:52 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... In-Reply-To: <3F81DB4D.C74BB049@dim.fm.usp.br> Message-ID: <20031006213452.18889.qmail@web20206.mail.yahoo.com> Não não Adriano, Um hash é q --- Adriano Vivan Borro escreveu: > Bem... > > O hash possui apenas 1 indice ( eh isso mesmo ??? > ). Como faco entao pra estar ordenando um arquivo > com, > digamos... 4 colunas. Estou querendo montar um Banco > de dados para trata-lo usando perl..... > > tks > []'s > > Nelson Ferraz wrote: > > > >>Arquivo de Entrada: > > >> > > >>Joseh > > >>Claudia > > >>Joseh > > >>Lucia > > >>Adriano > > >>Maneh > > >>Claudia > > >>Lucia > > >>Joseh > > >>Joseh > > >>Maneh > > >> > > >>Arquivo de Saida: > > >> > > >>Adriano 1 > > >>Claudia 2 > > >>Lucia 2 > > >>Joseh 4 > > >>Maneh 2 > > > > > > - em uma linha: > > > > > > perl -e ' while(<>){ chomp; $h{$_}++ }; print > map { "$_ $h{$_}\n" } sort > > > > Permita-me apenas desenvolver um pouco mais a > explicação. > > > > Sempre que você encontrar um problema deste tipo, > calcular a quantidade > > de cada item em uma lista, você deve pensar > automaticamente em um hash. > > > > foreach (@nome) { > > $count{$_}++; > > } > > > > Após este loop você terá a seguinte estrutura: > > > > %count = ( > > 'Lucia => 2, > > 'Adriano' => 1, > > 'Joseh' => 4, > > etc. > > ); > > > > No exemplo do Flavio Glock, ele está obtendo as > informações diretamente > > da entrada padrão: > > > > while (<>) { > > chomp; > > $count{$_}++; > > } > > > > O próximo passo é ordenar o hash por valor: > > > > @keys = sort { > > $count{$a} cmp $count{$b} > > } keys %count; > > > > > http://www.perldoc.com/perl5.8.0/pod/perlfaq4.html#How-do-I-sort-a-hash-(optionally-by-value-instead-of-key)- > > > > E então, imprimir os resultados: > > > > foreach (@keys) { > > print "$_\t$count{$_}\n"; > > } > > > > -- > > []s > > > > Nelson > > > > > ________________________________________________________________ > > Nelson Ferraz > > > > GNU BIS: http://www.gnubis.com.br > > PhPerl: http://www.phperl.com > > > > _______________________________________________ > > Cascavel-pm mailing list > > Cascavel-pm@mail.pm.org > > > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > > > -------------------------- > > Esta mensagem foi verificada > > pelo sistema de antivírus DIM e > > acredita-se estar livre de Virus. > > Virus data file v4296 created Oct 01 2003 > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From nferraz em phperl.com Mon Oct 6 16:22:39 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... In-Reply-To: <3F81DB4D.C74BB049@dim.fm.usp.br> References: <3F607E6E.6060105@terra.com.br> <3F60E2E8.A7469488@dim.fm.usp.br> <3F60EAD3.9090708@terra.com.br> <3F621BF2.42CD8761@dim.fm.usp.br> <3F621D95.8000002@terra.com.br> <3F67AD5C.A6D79D96@dim.fm.usp.br> <3F7A2E06.93D4B27A@dim.fm.usp.br> <20031001113044.5554ccc6.frighetti@cascavel.pm.org> <3F7AF365.3090203@terra.com.br> <1369832090.20031001141336@terra.com.br> <3F7B1ECC.721D@pucrs.br> <3F7B2714.6020809@terra.com.br> <3F7B8C2E.8ED0BDB7@dim.fm.usp.br> <3F7E000B.AC0EF17B@dim.fm.usp.br> <3F7DECF2.7A82@pucrs.br> <3F7F1568.1010009@phperl.com> <3F81DB4D.C74BB049@dim.fm.usp.br> Message-ID: <3F81DD1F.2040906@phperl.com> Adriano Vivan Borro wrote: > O hash possui apenas 1 indice ( eh isso mesmo ??? ). Como faco entao pra estar ordenando um arquivo com, > digamos... 4 colunas. Estou querendo montar um Banco de dados para trata-lo usando perl..... Pelo que eu entendi, até agora, só temos duas colunas: o nome e o número de ocorrências. Quais seriam as colunas adicionais? -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From glasswalk3r em yahoo.com.br Mon Oct 6 16:41:20 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... In-Reply-To: <3F81DB4D.C74BB049@dim.fm.usp.br> Message-ID: <20031006214120.97824.qmail@web20201.mail.yahoo.com> Olá Adriano, Um hash é quase a mesma coisa que um array... mas no array o índice é obrigatoriamente numérico, ok? No hash pode ser uma palavra, um número... qualquer coisa. Até um x_salada... Um hash é útil para vc fazer pesquisas não sequenciais. Imagine que vc quer ler um arquivo com os seguintes registros: zeca:/home/zeca:/bin/bash joana:/home/joana:/bin/bash Ok, agora imagine que você tem MUITOS registros como esse. Imagine também que os nomes nunca se repetem (como uma chave primária de um banco de dados). Se você colocar os dados num array, vai ter que buscar registro a registro quando quiser apenas UM registro especifíco: a joana, por exemplo. Se você usar um hash, e o nome do usuário como chave, BINGO! Você só precisa chamar $hash{joana} para ter acessos aos dados da joana. Hashes não podem ser ordenados como arrays usando a função sort. Uma forma de fazer isso é criar um array das chaves do array com um my @array = keys($hash); e ordenar o array com sort: sort(@array); depois um loop: foreach $chave(@array) { print "$hash{$chave}\n"; } a impressão estará ordenada. []´s Alceu --- Adriano Vivan Borro escreveu: > Bem... > > O hash possui apenas 1 indice ( eh isso mesmo ??? > ). Como faco entao pra estar ordenando um arquivo > com, > digamos... 4 colunas. Estou querendo montar um Banco > de dados para trata-lo usando perl..... > > tks > []'s > > Nelson Ferraz wrote: > Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From gmpowers em terra.com.br Mon Oct 6 20:44:23 2003 From: gmpowers em terra.com.br (Graciliano M. P.) Date: Mon Aug 2 21:26:48 2004 Subject: =?iso-8859-1?Q?Re:_=5BCascavel-pm=5D_=5BProjeto=5D:_API_de_Autentica=E7?= =?iso-8859-1?Q?=E3o_Vers=E1til_e?= References: <200310062136.h96LaSG11425@mail.pm.org> Message-ID: <000901c38c74$8b2664b0$598db0c8@gm> > Agora, meu problema: > > Eu quero poder escrever apenas > > __PERL__ > use Auth; > > my $auth = new Auth( 'POP:servidor' ); > die "Invalido" > unless $auth->check( 'nome', 'senha' ); > print "Valido"; > __END__ Bom, tratando-se de orientação a objeto e modelagem, o ideal é vc passar o objeto mutável já construído como parâmetro, melhor ainda se for uma interface: use Auth; my $auth_handler = new Auth::POP(...) ; my $auth = new Auth( $auth_handler ) ; Para saber se um determinado módulo Perl está disponível vc pode fazer: eval{ require Module::Foo } ; if ( !$@ ) { print "ok!" ;} ou então com "use": eval("use Module::Foo") ; if ( !$@ ) { print "ok!" ;} Para poder carrega-lo depois do teste com os parâmetros certos: delete $INC{'Module/Foo.pm'} ; eval(" use Module::Foo qw(x y z)"); Mas o ideal é jah testar passando os parâmetros. Boa sorte, GMP From lechamps em terra.com.br Tue Oct 7 07:36:05 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de =?ISO-8859-1?Q?Autentica=E7=E3?= =?ISO-8859-1?Q?o_Vers=E1til_e_Auto-Extens=EDvel?= References: <3F81B404.3030503@terra.com.br> <3F81BA90.200@phperl.com> Message-ID: <3F82B335.7030302@terra.com.br> Nelson C. T. Ferraz wrote: > Luis Campos de Carvalho wrote: > >> e gostaria que isso funcionasse em qualquer situação. Mas existem >> pequenos problemas. Por exemplo, o LDAP precisa de mais informação do >> que isso para funcionar. Da mesma forma, o DBI e o CGI também >> precisarão. Como codificar isso tudo em um URI fácil de usar e simples >> de resolver? > > > Você poderia passar estas informacões usando um hash: > > my $auth = new Auth ( > type => "DBI", > db_name => "test", > db_host => "localhost" > ); > > Se você quiser muito usar uma string, pode usar uma estrutura como esta: > > "type:DBI db_name:test db_host:localhost" > > Aí é só transformar a string em um hash. > Obrigado, Nelson, mas ainda não cheguei lá. Eu não tenho problema para codificar coisas como o query de SQL que deve ser utilizado pelo Auth::DBI nem o URL que deve ser utilizado pelo Auth::CGI para autenticar o sujeito. Meu problema é codificar isso tudo de forma que eu possa instanciar automaticamente o tipo correto, sem precisar de muito esforço. Caso eu precise passar parâmetros como estamos vendo, não conseguirei a tão desejada *uniformidade*, característica sem a qual uma interface não tem razão de ser. Eu pensei em usar um esquema parecido com nossos URI's: pop://host cgi://true_answer:false_answer@URL htpp://www.authentication.via.apache.org sql://dbuser:dbpasswd:SELECT user, passwd FROM table WHERE user = ? AND passwd = PASSWD(?) LIMIT 1@host Vejam como este esquema funciona bem para a maior parte das formas utilizadas. Meu problema é que ainda não é bom para SQL, ou eu ainda não consegui encontrar um padrão descente para codificar um URI para Auth::DBI. Sugestões, palpites, encorajamentos, piadinhas (engraçadas) e críticas são muito bem-vindas... -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From fglock em pucrs.br Tue Oct 7 09:41:09 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de Autenticação Versátil e Au to-Extensível References: <3F81B404.3030503@terra.com.br> Message-ID: <3F82D085.2191@pucrs.br> Irmão Champs: Dê uma olhada neste software: http://www.openwebmail.org No diretório cgi-bin, depois de fazer download: auth_ldap.pl auth_mysql.pl auth_pop3.pl ... e assim por diante, são 11 formas diferentes de autenticação. - Flavio S. Glock Luis Campos de Carvalho wrote: > > Irmãos monges > > Eu estou construindo uma API para autenticação na empresa, que > inicalmente deverá utilizar POP3, IMAP, LDAP, CGI ou DBI para obter > informações de autenticação de um usuário. > > Se alguém se interessar em olhar, eu tenho um UML feio, desenhado em > papel-de-pão, que posso enviar por email, como imagem tiff ou gif. > > Eu pensei em uma estrutura orientada a objetos, assim: > > Auth.pm > | > |--> Auth::DBI > |--> Auth::POP > |--> Auth::IMAP > |--> Auth::CGI > |--> Auth::HTTP > |--> Auth::LDAP > > Auth.pm é o meu "objeto principal" e todos os outros são "objetos > delegados", especializados na autenticação por um determinado método. > > Agora, meu problema: > > Eu quero poder escrever apenas > > __PERL__ > use Auth; > > my $auth = new Auth( 'POP:servidor' ); > die "Invalido" > unless $auth->check( 'nome', 'senha' ); > print "Valido"; > __END__ > > e gostaria que isso funcionasse em qualquer situação. Mas existem > pequenos problemas. Por exemplo, o LDAP precisa de mais informação do > que isso para funcionar. Da mesma forma, o DBI e o CGI também > precisarão. Como codificar isso tudo em um URI fácil de usar e simples > de resolver? > > *** *** *** > > No mesmo contexto, eu gostaria que o objeto Auth fosse capaz de > reconhecer quais extensões estão disponíveis em disco em um determinado > instante. Existe alguma forma padronizada de verificar se um determinado > tipo de objeto não-carregado em memória pode ser carregado (use > Auth::MyAuth;) em um determinado instante, em carregar o objeto? > > Eu gostaria muito que a solução independesse da localização física > dos arquivos, já que posso ter partes da subárvore de objetos auth em > locais diferentes (no $PERL_LIB/site-local e no meu ~/perl/lib, por > exemplo). > > Soluções pré-fabricadas e módulos prontos são muito benvindos. From nferraz em phperl.com Tue Oct 7 09:30:58 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... In-Reply-To: <20031006214120.97824.qmail@web20201.mail.yahoo.com> References: <20031006214120.97824.qmail@web20201.mail.yahoo.com> Message-ID: <3F82CE22.6070603@phperl.com> Alceu R. de Freitas Jr. wrote: > Hashes não podem ser ordenados como arrays usando a > função sort. Uma forma de fazer isso é criar um array > das chaves do array com um > my @array = keys($hash); > > e ordenar o array com sort: > > sort(@array); > > depois um loop: > > foreach $chave(@array) { > > print "$hash{$chave}\n"; > > } Completando a resposta do Alceu: Assim como na Língua Portuguesa, existe mais de uma maneira de se dizer a mesma coisa. A maneira mais comum, e portanto aceita, de se escrever o programa acima, é a seguinte: foreach (sort keys %hash) { print "$hash{$_}\n"; } Observe que o programa fica ainda mais legível, pois você vai diretamente ao ponto, sem rodeios. Inverter a ordem da frase, você também pode. Embora isto reduza um pouco a legibilidade: print "$hash{$_}\n" foreach (sort keys %hash); Em algumas situações vale a pena lançar mão deste recurso. Finalmente, você poderia usar o map: print map("$hash{$_}\n",sort keys %hash); Acredito que, neste caso, o map compromete a legibilidade sem oferecer nenhum benefício claro. Concluindo: é importante conhecer as diversas opções para que você possa se expressar da maneira mais clara possível. -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From daniel em ruoso.com Tue Oct 7 14:09:11 2003 From: daniel em ruoso.com (Daniel Ruoso) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] [Projeto]: API de =?ISO-8859-1?Q?Autentica=E7=E3o?= =?ISO-8859-1?Q?_Vers=E1til?= e =?ISO-8859-1?Q?Auto-Extens=EDvel?= In-Reply-To: <3F82B335.7030302@terra.com.br> References: <3F81B404.3030503@terra.com.br> <3F81BA90.200@phperl.com> <3F82B335.7030302@terra.com.br> Message-ID: <1065553747.2717.25.camel@guarani> Acredito que para ser versátil, o uso da API não deve amarrar a determinado método de autenticação. Acho que é interessante pensar em "security-domains", como é o PAM. Cada security domain tem a sua configuração de que métodos são necessários, para se autenticar um usuário, como por exemplo, dizer que se o cara está dentro de um ssh-agent e ele faz uma chamada utilizando uma chave autorizada, ele não precisa digitar a senha para entrar. No que isto implica? Basicamente, seria necessária a implementação de dois conjuntos, um conjunto de Subjects, Principals e Credentials (vou explicar o que é isso) e um conjunto de Login Modules, configurados para um Security Domain. Subject: uma pessoa, um indivíduo que terá acesso ao sistema. Principal: Uma das formas de identificar o Subject, por exemplo: uma chave dsa de ssh, ou uma chave GPG, ou um login. Credential: A forma de validação de um principal, por exemplo a senha para aquele login. Login Module: Um dos serviços de autenticação, por exemplo, validar login e senha, checar uma assinatura GPG Security Domain: Um determinado conjunto de definições de quais Login Modules são requeridos para a autenticação do usuário. Resumindo. O software que quisesse consultar a autenticação teria que construir o conjunto de Principals e Credentials e passar para o security domain específico e esperar a resposta. O security domain iria ser responsável por pegar estes Principals e Credentials, chamar os Login Modules e obter as resposta. Acredito que desta forma seria possível se fazer uma autenticação bem versátil, e ainda com uma vantagem, que é a de seguir um padrão de autenticação com conceito mais do que provado que é o PAM e o JAAS (Java Authentication and Authorization Service) []'s daniel Em Ter, 2003-10-07 às 09:36, Luis Campos de Carvalho escreveu: > Nelson C. T. Ferraz wrote: > > Luis Campos de Carvalho wrote: > > > >> e gostaria que isso funcionasse em qualquer situação. Mas existem > >> pequenos problemas. Por exemplo, o LDAP precisa de mais informação do > >> que isso para funcionar. Da mesma forma, o DBI e o CGI também > >> precisarão. Como codificar isso tudo em um URI fácil de usar e simples > >> de resolver? > > > > > > Você poderia passar estas informacões usando um hash: > > > > my $auth = new Auth ( > > type => "DBI", > > db_name => "test", > > db_host => "localhost" > > ); > > > > Se você quiser muito usar uma string, pode usar uma estrutura como esta: > > > > "type:DBI db_name:test db_host:localhost" > > > > Aí é só transformar a string em um hash. > > > > Obrigado, Nelson, mas ainda não cheguei lá. > Eu não tenho problema para codificar coisas como o query de SQL que > deve ser utilizado pelo Auth::DBI nem o URL que deve ser utilizado pelo > Auth::CGI para autenticar o sujeito. Meu problema é codificar isso tudo > de forma que eu possa instanciar automaticamente o tipo correto, sem > precisar de muito esforço. > > Caso eu precise passar parâmetros como estamos vendo, não conseguirei > a tão desejada *uniformidade*, característica sem a qual uma interface > não tem razão de ser. > > Eu pensei em usar um esquema parecido com nossos URI's: > > pop://host > > cgi://true_answer:false_answer@URL > > htpp://www.authentication.via.apache.org > > sql://dbuser:dbpasswd:SELECT user, passwd FROM table WHERE user = ? > AND passwd = PASSWD(?) LIMIT 1@host > > Vejam como este esquema funciona bem para a maior parte das formas > utilizadas. Meu problema é que ainda não é bom para SQL, ou eu ainda não > consegui encontrar um padrão descente para codificar um URI para Auth::DBI. > > Sugestões, palpites, encorajamentos, piadinhas (engraçadas) e > críticas são muito bem-vindas... From vivan em dim.fm.usp.br Wed Oct 8 14:35:38 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <20031006214120.97824.qmail@web20201.mail.yahoo.com> Message-ID: <3F84670A.7B736629@dim.fm.usp.br> Opa, To quase chegando lah. O problema eh q eu precisava ordenar um arquivo de 3 ou mais colunas. Tentei usar a rotina, mas nao deu certo. Digamos que tenho entao, um arquivo com nomes e sobrenomes. Quero processa-lo de tal forma que me retorne um arquivo com os nomes ordenados (aparecendo uma unica vez), os sobrenomes relativos aos nomes, e a quantidade de vezes que esse nome apareceu. Tb, nao entendi muito bem o exemplo do flavio. O q este map faz? Enfim... Tah ae a rotina que eu escrevi, com a ajuda d vcs: #!/bin/perl open (NOMES,"nomes.txt"); open (OUTPUT,">output.txt); #rotina do flavio, q nao consegui rodar e nao entendi muito bem #while () #{ # chomp; # $h{$_}++}; # print map { "$_ $h{$_}\n" } sort key %h; while () { chomp; $count{$_}++; } @keys=sort { $_{$a} cmp $_{$b} } keys %count; foreach (@keys) { print OUTPUT "$_\t$count{$_}\n"; } close OUTPUT; close NOMES; Bem... Resumindo... Tenho o arquivo: Zeh Silva Scheila Carvalho Zeh Tripeh Claudia Shiffer Zeh Maneh E quero como saida: Claudia Shiffer 1 Scheila Carvalho 1 Zeh Maneh, Silva, Tripeh 3 Queria perguntar tb qual a vantagem d trabalhar com variaveis de sistema ($_ @_ .... ) jah q o nao preciso declarar variaveis no Perl. Tks, Adriano. > Olá Adriano, > > Um hash é quase a mesma coisa que um array... mas no > array o índice é obrigatoriamente numérico, ok? No > hash pode ser uma palavra, um número... qualquer > coisa. Até um x_salada... > > Um hash é útil para vc fazer pesquisas não > sequenciais. Imagine que vc quer ler um arquivo com os > seguintes registros: > > zeca:/home/zeca:/bin/bash > joana:/home/joana:/bin/bash > > Ok, agora imagine que você tem MUITOS registros como > esse. Imagine também que os nomes nunca se repetem > (como uma chave primária de um banco de dados). Se > você colocar os dados num array, vai ter que buscar > registro a registro quando quiser apenas UM registro > especifíco: a joana, por exemplo. > > Se você usar um hash, e o nome do usuário como chave, > BINGO! Você só precisa chamar > $hash{joana} > para ter acessos aos dados da joana. > > Hashes não podem ser ordenados como arrays usando a > função sort. Uma forma de fazer isso é criar um array > das chaves do array com um > my @array = keys($hash); > > e ordenar o array com sort: > > sort(@array); > > depois um loop: > > foreach $chave(@array) { > > print "$hash{$chave}\n"; > > } > > a impressão estará ordenada. > > []´s > Alceu > --- Adriano Vivan Borro > escreveu: > Bem... > > > > O hash possui apenas 1 indice ( eh isso mesmo ??? > > ). Como faco entao pra estar ordenando um arquivo > > com, > > digamos... 4 colunas. Estou querendo montar um Banco > > de dados para trata-lo usando perl..... > > > > tks > > []'s > > > > Nelson Ferraz wrote: > > > > Yahoo! Mail - o melhor webmail do Brasil > http://mail.yahoo.com.br > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > -------------------------- > Esta mensagem foi verificada > pelo sistema de antivírus DIM e > acredita-se estar livre de Virus. > Virus data file v4296 created Oct 01 2003 From lechamps em terra.com.br Wed Oct 8 12:37:58 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] =?iso-8859-1?q?Exerc=EDcios_de_Perl_?= Message-ID: <3F844B76.2070907@terra.com.br> PessoAll, estes são os exercícios mais complicados que eu já vi! Divirtam-se! http://tnx.nl/scribble/1458FENU -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From fglock em pucrs.br Wed Oct 8 13:10:09 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <20031006214120.97824.qmail@web20201.mail.yahoo.com> <3F84670A.7B736629@dim.fm.usp.br> Message-ID: <3F845301.3086@pucrs.br> Adriano Vivan Borro wrote: > > Opa, > > To quase chegando lah. O problema eh q eu precisava ordenar um arquivo > de 3 ou mais colunas. Tentei usar a rotina, mas nao deu certo. Digamos > que tenho entao, um arquivo com nomes e sobrenomes. Quero processa-lo de > tal forma que me retorne um arquivo com os nomes ordenados (aparecendo > uma unica vez), os sobrenomes relativos aos nomes, e a quantidade de > vezes que esse nome apareceu. Tb, nao entendi muito bem o exemplo do > flavio. O q este map faz? Enfim... Tah ae a rotina que eu escrevi, com a > ajuda d vcs: > > #!/bin/perl > open (NOMES,"nomes.txt"); > open (OUTPUT,">output.txt); > > #rotina do flavio, q nao consegui rodar e nao entendi muito bem > #while () > #{ > # chomp; > # $h{$_}++}; > # print map { "$_ $h{$_}\n" } sort key %h; > > while () > { > chomp; > $count{$_}++; > } > @keys=sort { > $_{$a} cmp $_{$b} > } keys %count; > foreach (@keys) { > print OUTPUT "$_\t$count{$_}\n"; > } > close OUTPUT; > close NOMES; > > Bem... Resumindo... > > Tenho o arquivo: > > Zeh Silva > Scheila Carvalho > Zeh Tripeh > Claudia Shiffer > Zeh Maneh > > E quero como saida: > > Claudia Shiffer 1 > Scheila Carvalho 1 > Zeh Maneh, Silva, Tripeh 3 Sem map, desta vez: while (<>) { ($nome,$sobrenome) = chomp && split; $h{$nome}{$sobrenome}++ }; for $nome ( sort keys %h ) { print "$nome ", join(',', keys %{$h{$nome}}) ," ", 0 + keys %{$h{$nome}}, "\n"; } # saída: Claudia Shiffer 1 Scheila Carvalho 1 Zeh Tripeh,Silva,Maneh 3 - Flavio S. Glock From lechamps em terra.com.br Wed Oct 8 13:30:22 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <20031006214120.97824.qmail@web20201.mail.yahoo.com> <3F84670A.7B736629@dim.fm.usp.br> <3F845301.3086@pucrs.br> Message-ID: <3F8457BE.30509@terra.com.br> Flavio S. Glock wrote: > Adriano Vivan Borro wrote: > >>Opa, >> >>To quase chegando lah. O problema eh q eu precisava ordenar um arquivo >>de 3 ou mais colunas. Tentei usar a rotina, mas nao deu certo. Digamos >>que tenho entao, um arquivo com nomes e sobrenomes. Quero processa-lo de >>tal forma que me retorne um arquivo com os nomes ordenados (aparecendo >>uma unica vez), os sobrenomes relativos aos nomes, e a quantidade de >>vezes que esse nome apareceu. Tb, nao entendi muito bem o exemplo do >>flavio. O q este map faz? Enfim... Tah ae a rotina que eu escrevi, com a >>ajuda d vcs: >> >>#!/bin/perl >>open (NOMES,"nomes.txt"); >>open (OUTPUT,">output.txt); >> >>#rotina do flavio, q nao consegui rodar e nao entendi muito bem >>#while () >>#{ >># chomp; >># $h{$_}++}; >># print map { "$_ $h{$_}\n" } sort key %h; >> >>while () >>{ >> chomp; >> $count{$_}++; >>} >>@keys=sort { >> $_{$a} cmp $_{$b} >> } keys %count; >>foreach (@keys) { >> print OUTPUT "$_\t$count{$_}\n"; >> } >>close OUTPUT; >>close NOMES; >> >>Bem... Resumindo... >> >>Tenho o arquivo: >> >>Zeh Silva >>Scheila Carvalho >>Zeh Tripeh >>Claudia Shiffer >>Zeh Maneh >> >>E quero como saida: >> >>Claudia Shiffer 1 >>Scheila Carvalho 1 >>Zeh Maneh, Silva, Tripeh 3 > > > Sem map, desta vez: > > while (<>) > { > ($nome,$sobrenome) = chomp && split; > $h{$nome}{$sobrenome}++ > }; > > for $nome ( sort keys %h ) { > print "$nome ", > join(',', keys %{$h{$nome}}) ," ", > 0 + keys %{$h{$nome}}, "\n"; > } > > # saída: > Claudia Shiffer 1 > Scheila Carvalho 1 > Zeh Tripeh,Silva,Maneh 3 > > Flávio, se eu entendi direito, o Adriano tem 3 colunas (nomes). Isso complica bastante a coisa, já que a estrutura de dados que parece ser a mais adequada é uma árvore com hashes para representar as sub-árvores e arrays de valores nas folhas. Estou pensando em uma solução simples. Por favor me corrijam se eu estiver errado. -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From nferraz em phperl.com Wed Oct 8 18:28:48 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:48 2004 Subject: [Cascavel-pm] Palestras no =?iso-8859-1?q?s=E1bado?= Message-ID: <3F849DB0.2030402@phperl.com> Pessoal, Neste sábado tem palestra de Perl, PHP, ZOPE e Java na UNIFIEO: http://maplink.uol.com.br/pega_mapa_email.asp?id=44948 Aqui vai o horário do evento: 8:00~9:00 Credenciamento 9:00~9:15 Apresentacao 9:15~10:45 - Perl - Nelson Ferraz 10:40~11:00 - Pausa 11:00~12:30 - PHP 12:30~13:45 - Almoco 13:45~15:15 - Zope - Luciano Ramalho 15:15~15:35 - Pausa 15:35~17:05 - Java - Vinicius/Yara Para participar, basta levar 1kg de alimento. (P.S.: A palestra sobre Perl vai ser bem introdutória...) -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From vivan em dim.fm.usp.br Thu Oct 9 14:55:10 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Palestras no sábado References: <3F849DB0.2030402@phperl.com> Message-ID: <3F85BD1E.8D3995C1@dim.fm.usp.br> Opa! Valeu pelo aviso. Vou tentar estar presente lah, ao menos pra dar um oi. Teh mais, Adriano. Nelson C. T. Ferraz wrote: > Pessoal, > > Neste sábado tem palestra de Perl, PHP, ZOPE e Java na UNIFIEO: > > http://maplink.uol.com.br/pega_mapa_email.asp?id=44948 > > Aqui vai o horário do evento: > > 8:00~9:00 Credenciamento > 9:00~9:15 Apresentacao > 9:15~10:45 - Perl - Nelson Ferraz > 10:40~11:00 - Pausa > 11:00~12:30 - PHP > 12:30~13:45 - Almoco > 13:45~15:15 - Zope - Luciano Ramalho > 15:15~15:35 - Pausa > 15:35~17:05 - Java - Vinicius/Yara > > Para participar, basta levar 1kg de alimento. > > (P.S.: A palestra sobre Perl vai ser bem introdutória...) > > -- > []s > > Nelson > > ________________________________________________________________ > Nelson Ferraz > > GNU BIS: http://www.gnubis.com.br > PhPerl: http://www.phperl.com > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > -------------------------- > Esta mensagem foi verificada > pelo sistema de antivírus DIM e > acredita-se estar livre de Virus. > Virus data file v4297 created Oct 08 2003 From vivan em dim.fm.usp.br Thu Oct 9 16:41:15 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Outro probleminha.... References: <20031006214120.97824.qmail@web20201.mail.yahoo.com> <3F84670A.7B736629@dim.fm.usp.br> <3F845301.3086@pucrs.br> Message-ID: <3F85D5FB.D5271A8D@dim.fm.usp.br> Gente, Eu rodei a rotina que o Flavio me sugeriu, mas nao me retornou o esperado. Vejam onde posso ter errado, plz. open (NOMES,"nomes2.txt); open (SAI,">sai.txt); while () { ($nome,$sobrenome)=chomp && split; $h{$nome}{$sobrenome}++; }; for $nome (sort keys %h) { print SAI {"$nome ", join(',', keys %{$h{$nome}})," ", 0 + keys %{$h{$nome}},"\n"}; } A saida obtida foi.... HASH(0x100216a8)HASH(0x1002169c)HASH(0x100216cc)HASH(0x100216a8)HASH(0x1002169c)HASH(0x100216a8) O q pode estar acotecendo? Tks, Adriano. Flavio S. Glock wrote: > Adriano Vivan Borro wrote: > > > > Opa, > > > > To quase chegando lah. O problema eh q eu precisava ordenar um arquivo > > de 3 ou mais colunas. Tentei usar a rotina, mas nao deu certo. Digamos > > que tenho entao, um arquivo com nomes e sobrenomes. Quero processa-lo de > > tal forma que me retorne um arquivo com os nomes ordenados (aparecendo > > uma unica vez), os sobrenomes relativos aos nomes, e a quantidade de > > vezes que esse nome apareceu. Tb, nao entendi muito bem o exemplo do > > flavio. O q este map faz? Enfim... Tah ae a rotina que eu escrevi, com a > > ajuda d vcs: > > > > #!/bin/perl > > open (NOMES,"nomes.txt"); > > open (OUTPUT,">output.txt); > > > > #rotina do flavio, q nao consegui rodar e nao entendi muito bem > > #while () > > #{ > > # chomp; > > # $h{$_}++}; > > # print map { "$_ $h{$_}\n" } sort key %h; > > > > while () > > { > > chomp; > > $count{$_}++; > > } > > @keys=sort { > > $_{$a} cmp $_{$b} > > } keys %count; > > foreach (@keys) { > > print OUTPUT "$_\t$count{$_}\n"; > > } > > close OUTPUT; > > close NOMES; > > > > Bem... Resumindo... > > > > Tenho o arquivo: > > > > Zeh Silva > > Scheila Carvalho > > Zeh Tripeh > > Claudia Shiffer > > Zeh Maneh > > > > E quero como saida: > > > > Claudia Shiffer 1 > > Scheila Carvalho 1 > > Zeh Maneh, Silva, Tripeh 3 > > Sem map, desta vez: > > while (<>) > { > ($nome,$sobrenome) = chomp && split; > $h{$nome}{$sobrenome}++ > }; > > for $nome ( sort keys %h ) { > print "$nome ", > join(',', keys %{$h{$nome}}) ," ", > 0 + keys %{$h{$nome}}, "\n"; > } > > # saída: > Claudia Shiffer 1 > Scheila Carvalho 1 > Zeh Tripeh,Silva,Maneh 3 > > - Flavio S. Glock > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm > > -------------------------- > Esta mensagem foi verificada > pelo sistema de antivírus DIM e > acredita-se estar livre de Virus. > Virus data file v4296 created Oct 01 2003 From fglock em pucrs.br Thu Oct 9 14:49:56 2003 From: fglock em pucrs.br (fglock@pucrs.br) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Outro probleminha.... Message-ID: <200310091946.h99Jk6dl020052@rigel.pucrs.br> > Eu rodei a rotina que o Flavio me sugeriu, > mas nao me retornou o esperado. > Vejam onde posso ter errado, plz. Parece que você criou um hash anônimo! print SAIDA { 'bleh', 'blah' }; Tente sem as chaves: print SAIDA 'bleh', 'blah'; - Flavio S. Glock From frighetti em cascavel.pm.org Tue Oct 14 07:17:00 2003 From: frighetti em cascavel.pm.org (Fabiano Reese Righetti) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Fw: Perl Message-ID: <20031014101700.0ac01bbb.frighetti@cascavel.pm.org> Begin forwarded message: Date: Sun, 12 Oct 2003 22:31:50 -0300 From: Fabrício Müller da Silva To: Subject: Perl Olá Meu nome é Fabrício, sou estudante do curso de Ciência da Computação na Universidade do Vale do Rio dos Sinos (Unisinos). Estou fazendo um trabalho para a disciplina de Linguagens de Programação sobre Perl. Gostaria de saber se vocês podem me enviar ou indicar algum material que fale sobre a linguagem no nível de implementação de seus tipos de dados, subprogramas, nomes e escopos. Agradeço. Fabrício. From lechamps em terra.com.br Tue Oct 14 08:17:56 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Material sobre =?ISO-8859-1?Q?implementa=E7=E3?= =?ISO-8859-1?Q?o_de_tipos_de_dados=2C_estruturas=2C_subprogr?= =?ISO-8859-1?Q?amas=2C_nomes_e_escopos_em_Perl=2E?= References: <20031014101700.0ac01bbb.frighetti@cascavel.pm.org> Message-ID: <3F8BF784.1090400@terra.com.br> Fabiano Reese Righetti wrote: > > Begin forwarded message: > > Date: Sun, 12 Oct 2003 22:31:50 -0300 > From: Fabrício Müller da Silva > To: > Subject: Perl > > Olá > > Meu nome é Fabrício, sou estudante do curso de Ciência da Computação > na Universidade do Vale do Rio dos Sinos (Unisinos). Estou fazendo um > trabalho para a disciplina de Linguagens de Programação sobre Perl. > Gostaria de saber se vocês podem me enviar ou indicar algum material > que fale sobre a linguagem no nível de implementação de seus tipos > de dados, subprogramas, nomes e escopos. Agradeço. > Fabrício. Interessante... a gente podia mandar o fonte do Parrot para ele... =-] Agora, sério: Fabrício, seja bem-vindo! Eu acho que você pode encontrar muito do que você deseja saber no website do perl: http://www.perl.org. Existe lá uma secção de documentação exclusiva para desenvolvedores e hackers do código fonte do perl. Você pode tentar contatar os autores da linguagem, também. Procure pelos contatos oficiais do Larry Wall (autor da linguagem) e do Randal Schwartz (um dos maiores contribuidores, IMHO) na secção de autores do website http://search.cpan.org/ Ah! Infelizmente, 99,73% deste material está em inglês. Eu espero que você não tenha problemas com esta língua. Boa sorte! []'z! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From fglock em pucrs.br Tue Oct 14 08:42:05 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Fw: Perl References: <20031014101700.0ac01bbb.frighetti@cascavel.pm.org> Message-ID: <3F8BFD2D.4D39@pucrs.br> Fabiano Reese Righetti wrote: > > Begin forwarded message: > > Date: Sun, 12 Oct 2003 22:31:50 -0300 > From: Fabrício Müller da Silva > To: > Subject: Perl > > Olá > > Meu nome é Fabrício, sou estudante do curso de Ciência da Computação na Universidade do Vale do Rio dos Sinos (Unisinos). Estou fazendo um trabalho para a disciplina de Linguagens de Programação sobre Perl. Gostaria de saber se vocês podem me enviar ou indicar algum material que fale sobre a linguagem no nível de implementação de seus tipos de dados, subprogramas, nomes e escopos. Agradeço. > Aqui tem informações sobre todos os tipos de dados internos: "PerlGuts Illustrated" http://gisle.aas.no/perl/illguts/ Além disso, se você instalar o Perl, vem toda a documentação junto. No pacote da ActiveState, a documentação fica no diretório HTML. A documentação também pode ser acessada no site www.perldoc.com - Flavio S. Glock From vivan em dim.fm.usp.br Wed Oct 15 15:40:32 2003 From: vivan em dim.fm.usp.br (Adriano Vivan Borro) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] BD em Perl Message-ID: <3F8DB0BF.3890EC19@dim.fm.usp.br> Fala povo, Eu to precisando montar um Banco de Dados, e to querendo usar Perl para isso. Alguem conhece alguma literatura, apostila ou tutorial indicado para tal? Estou estudando tb a viabilidade de jogar tudo em MySQL, mas gostaria de saber um pouco mais sobre BD's em Perl. Meu BD nao serah muito complexo (qto a estrutura), porem, a quantidade de dados eh bastante consideravel. Tks, Adriano. From psyctrl em terra.com.br Thu Oct 16 08:58:37 2003 From: psyctrl em terra.com.br (Psycho Ctrl) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] BD em Perl References: <3F8DB0BF.3890EC19@dim.fm.usp.br> Message-ID: <002b01c393ed$9966f6e0$bd15fea9@le> http://search.cpan.org/search?query=mysql&mode=all ----- Original Message ----- From: "Adriano Vivan Borro" To: "Cascavel Perl Mongers" Sent: Wednesday, October 15, 2003 5:40 PM Subject: [Cascavel-pm] BD em Perl > Fala povo, > > Eu to precisando montar um Banco de Dados, e to querendo usar Perl para > isso. Alguem conhece alguma literatura, apostila ou tutorial indicado > para tal? Estou estudando tb a viabilidade de jogar tudo em MySQL, mas > gostaria de saber um pouco mais sobre BD's em Perl. Meu BD nao serah > muito complexo (qto a estrutura), porem, a quantidade de dados eh > bastante consideravel. > > Tks, > Adriano. > > _______________________________________________ Cascavel-pm mailing list Cascavel-pm@mail.pm.org http://cascavel.pm.org/mailman/listinfo/cascavel-pm From daniel em ruoso.com Thu Oct 16 09:20:12 2003 From: daniel em ruoso.com (Daniel Ruoso) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] BD em Perl In-Reply-To: <3F8DB0BF.3890EC19@dim.fm.usp.br> References: <3F8DB0BF.3890EC19@dim.fm.usp.br> Message-ID: <1066314011.772.8.camel@cedro> Diga lá adriano, O acesso a banco de dados no Perl normalmente é feito através da DBI, que é um módulo da CPAN. A DBI funciona mais ou menos (muito mais ou menos) como o ODBC, por que ele tem duas camadas, a primeira que é a própria DBI e depois os drivers, no caso do mysql o DBD::mysql. Um exemplo de acesso a banco em perl seria assim: use DBI; use strict; my $dbi = DBI->connect("dbi:mysql:database=mydatabase;host=localhot","user","password") || die $!; my $sth = $dbi->prepare("SELECT * FROM myTable"); $sth->execute || die $!; while (my $row = $sth->fetchrow_hashref) { # fazer alguma coisa com $row, que é uma # referência para um hash } $sth->finish; $dbi->disconnect; A documentação mais rápida é, sem dúvida: perldoc DBI perldoc DBD::mysql Mas tem um livro da O'Relly sobre a DBI, eu acho que o nome é "Mastering DBI" ou qualquer coisa assim... Quanto à viabilidade, vc só precisa pensar em outros bancos se você precisar de subselects, stored procedures e coisas assim... a escolha imediatamente depois do mysql IMHO, é o postgresql. Em uma estrutura de dados simples, o Mysql é o mais interessante pela sua performance. Em Qua, 2003-10-15 às 17:40, Adriano Vivan Borro escreveu: > Fala povo, > > Eu to precisando montar um Banco de Dados, e to querendo usar Perl para > isso. Alguem conhece alguma literatura, apostila ou tutorial indicado > para tal? Estou estudando tb a viabilidade de jogar tudo em MySQL, mas > gostaria de saber um pouco mais sobre BD's em Perl. Meu BD nao serah > muito complexo (qto a estrutura), porem, a quantidade de dados eh > bastante consideravel. > > Tks, > Adriano. > > > ______________________________________________________________________ > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm -- Atenciosamente, Daniel Ruoso Desenvolvimento de Sistemas daniel@oktiva.com.br Oktiva Telecomunicaes e Informtica From nferraz em phperl.com Thu Oct 16 12:23:43 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] BD em Perl In-Reply-To: <3F8DB0BF.3890EC19@dim.fm.usp.br> References: <3F8DB0BF.3890EC19@dim.fm.usp.br> Message-ID: <3F8ED41F.7040101@phperl.com> Adriano Vivan Borro wrote: > Eu to precisando montar um Banco de Dados, e to querendo usar Perl para > isso. Alguem conhece alguma literatura, apostila ou tutorial indicado > para tal? Este documento fala sobre o PostgreSQL: http://www.gnubis.com.br/cgi-local/twiki/bin/view/SIGL/WebHome -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From nferraz em phperl.com Thu Oct 16 13:38:14 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] getfree.pl - instalando softwares livres no Windows Message-ID: <3F8EE596.4030000@phperl.com> Pessoal, Aqui vai um pequeno script para automaticamente baixar e instalar diversos softwares livres no Windows. A idéia é que o programa seja executado sempre que o computador é ligado, baixe os arquivos necessários, efetue a instalação e depois se desinstale automaticamente. Se a transmissão for interrompida, o programa deve continuar o download de onde parou. A maior parte já está ok, incluindo o download e a descompactação. O que falta fazer é: - Criar chave no registry para execução na inicialização - Criar atalhos no Desktop após o término do download Para o futuro, seria legal se o script pudesse ler as informações do Outlook/ICQ/MSN/etc e configurar as alternativas livres corretamente. Mas isto fica para depois. :) Pergunta: alguém aqui tem experiência com os módulos Win32 e com a criação de executáveis no Windows? -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com -------------- Próxima Parte ---------- #!/usr/bin/perl # Perl script to automatically download and install open source software # # To generate bytecode: # perl -MO=Bytecode,-O6,-ogetfree.plc,-umain getfree.pl # # More info on compiling perl scripts: # http://search.cpan.org/~jhi/perl-5.8.1-RC5/pod/perlcompile.pod use strict; use warnings; # # Don't execute if year > 2003 (expiration date) # my ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time); die "Expired" if $year > 103; ############# # # # LIBRARIES # # # ############# use FindBin; # I'm running in $FindBin::Bin use LWP::UserAgent; use LWP::MediaTypes qw(guess_media_type media_suffix); use URI (); use HTTP::Date (); use Digest::SHA1 qw(sha1); use Archive::Zip qw(:ERROR_CODES); #use Win32::Shortcut; #use Win32::TieRegistry; ######## # # # DATA # # # ######## # These are the files we'll download my %SW = ( 'OpenOffice.org 1.1' => 'http://www.ibiblio.org/pub/packages/openoffice/stable/1.1.0/OOo_1.1.0_Win32Intel_install.zip', 'Mozilla Firebird 0.7' => 'http://ftp.mozilla.org/pub/mozilla.org/firebird/releases/0.7/MozillaFirebird-0.7-win32.zip', 'Mozilla Thunderbird 0.3' => 'http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/0.3/thunderbird-0.3-win32.zip' ); my $USER_AGENT = "GetFree/0.0.1"; my $DEBUG = 1; ######## # # # MAIN # # # ######## # Install myself Install_myself(); # Download files foreach (keys %SW) { Download($SW{$_}); } # Unzip files foreach (keys %SW) { my ($filename) = $SW{$_} =~ m!([^/]+)$!; # get filename from url Unzip($filename) if $filename =~ m/\.zip$/i; } # Uninstall myself Uninstall_myself(); ######## # # # SUBS # # # ######## sub Install_myself { # Copy myself to home drive my $home = $ENV{HOMEDRIVE}; # Usually "C:" my ($script_name) = $0 =~ m!([^/]+)$!; if (!-f "$home/$script_name") { # Copy myself to home dir system("copy $FindBin::Bin/$script_name $home"); # TO-DO: Add key to registry # [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] } } ### sub Uninstall_myself { # Remove myself from home drive my $home = $ENV{HOMEDRIVE}; # Usually "C:" my ($script_name) = $0 =~ m!([^/]+)$!; if (!-f "$home/$script_name") { # Delete me from home dir unlink("$home/$script_name"); # TO-DO: Delete key from registry # [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] } } ### sub Download { # Download a given URL; resume if interrupted. my ( $file, $fsize, $last, $mod, $req, $res, $start, $size, $time, $total, $s ); my $uri = URI->new(shift); ($file) = $uri =~ m!([^/]+)$!; # get filename from url my $ua = new LWP::UserAgent; $ua->agent( $USER_AGENT ); print "Checking remote file '$uri'...\n" if $DEBUG; $req = new HTTP::Request HEAD => $uri->as_string; $res = $ua->request( $req ); $req = new HTTP::Request GET => $uri->as_string; if (!$res->is_success) { die "Error"; # $res->status_line; } $fsize = 0; $total = $res->content_length || 0; $mod = $res->last_modified || time; print "Looking for local file '$file'...\n" if $DEBUG; if (-e $file) { my @s = stat($file); $fsize = $s[7]; my $fmod = $s[9]; if ($fmod >= $mod && $fsize >= $total) { # Completed print "Found it, and seems complete.\n" if $DEBUG; return; } elsif ($fsize < $total && $res->protocol =~ /1\.1/) { print "Found it, but seems incomplete. Appending to file '$file'\n" if $DEBUG; $size = $fsize; my $headers = $req->headers(); $headers->push_header( Range => "bytes=$fsize-" ); open(FILE, ">>$file") || return "$file: $!\n"; } } else { print "Not found. Creating new file '$file'\n" if $DEBUG; open(FILE, ">$file") || return 0; } print "Requesting '$uri'...\n" if $DEBUG; $start = time; $last = 0; $res = $ua->request($req, sub { my ($data, $response, $protocol) = @_; print FILE $data; $time = time - $start; $size += length($data); if ($time != $last) { $last = $time; } } ); if ( $res->is_success || $res->message =~ /^Interrupted/ || $res->message =~ /^OK/) { close (FILE); my $now = time; utime $now, $now, $file; print "Finished!\n\n" if $DEBUG; } else { print "Transfer incomplete: '$res->message'\n\n"; } } ### sub Unzip { # Unzip a given zip file (extract the entire tree) my $zipName = shift; my $zip = Archive::Zip->new(); print "Unzip '$zipName'...\n" if $DEBUG; my $status = $zip->read( $zipName ); die "Read of $zipName failed\n" if $status != AZ_OK; $zip->extractTree(); die "Extracting from $zipName failed\n" if $status != AZ_OK; print "Ok\n" if $DEBUG; } __END__ From fglock em pucrs.br Thu Oct 16 15:11:20 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] getfree.pl - instalando softwares livres no Windows References: <3F8EE596.4030000@phperl.com> Message-ID: <3F8EFB68.5C9@pucrs.br> Nelson Ferraz wrote: > > Pergunta: alguém aqui tem experiência com os módulos Win32 e com a > criação de executáveis no Windows? Eu já usei o PAR para criação de executável - funciona bem, e o executável não fica muito grande. Pode ser instalado com perl -MCPAN -e shell install PAR Dá alguns erros na instalação, mas no fim funciona... - Flavio S. Glock From glasswalk3r em yahoo.com.br Fri Oct 17 07:37:26 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] =?iso-8859-1?q?acesso_=E0_sistema_de_arquivos_de_u?= =?iso-8859-1?q?m_Ipaq?= Message-ID: <20031017123726.94815.qmail@web20209.mail.yahoo.com> Olá lista, Estou tentando acessar o sistema de arquivos de um Ipaq com Windows CE rodando. Eu gostaria de listar alguns arquivos, e copiar outros do PC para o Ipaq conectado. O problema é que a estação Windows NT workstation, aonde conectei o IPaq, não fornece uma unidade (X:, por exemplo), para que eu possa fazer o acesso. Sem isso, como eu poderia fazer um 'opendir' ou 'chdir' para o Ipaq? O DOS não me fornece absolutamente nada sobre o Ipaq... só consigo acessá-lo se usar o Windows Explorer... Alguém já fez isso? Eu fiz uma procura rápida na web e não encontrei nada... Grato, ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From nferraz em phperl.com Fri Oct 17 23:23:22 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] getfree.pl - instalando softwares livres no Windows In-Reply-To: <3F8EFB68.5C9@pucrs.br> References: <3F8EE596.4030000@phperl.com> <3F8EFB68.5C9@pucrs.br> Message-ID: <3F90C03A.2070405@phperl.com> Flavio S. Glock wrote: > Eu já usei o PAR para criação de executável - funciona bem, e o > executável não fica muito grande. Obrigado pela dica! O executável ficou com 2.4Mb, mas consegui reduzir o tamanho para 1.3Mb, com o UPX. (Apenas como teste, um "Hello, world" gerou um executável de 1.7Mb, que foi reduzido para 615kb com o UPX). Aqui vai a última versão do script. -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com -------------- Próxima Parte ---------- #!/usr/bin/perl # Perl script to automatically download and install open source software # # To generate executable: (pp -o getfree.exe getfree.pl) use strict; use warnings; # # Don't execute if year > 2003 (expiration date) # my ($sec,$min,$hour,$day,$mon,$year,$wday) = localtime(time); die "Expired" if $year > 103; ############# # # # LIBRARIES # # # ############# use FindBin; # I'm running in $FindBin::Bin use File::Copy; use URI (); use LWP::UserAgent; use Archive::Zip qw(:ERROR_CODES); #use Digest::SHA1 qw(sha1); #use Win32::TieRegistry ( TiedHash => '%RegHash' ); #use Win32::Shortcut; ######## # # # DATA # # # ######## # These are the files we'll download my %SW = ( 'OpenOffice.org 1.1' => { uri => 'http://www.ibiblio.org/pub/packages/openoffice/stable/1.1.0/OOo_1.1.0_Win32Intel_install.zip', sha1=> '454953c6595b91b175f79d57c99d065f5b89025f', install => 'OOo_1.1.0_Win32Intel_install/setup.exe' }, 'Mozilla 1.5' => { uri => 'http://ftp.mozilla.org/pub/mozilla.org/mozilla/releases/mozilla1.5/mozilla-win32-1.5-installer.exe', sha1 => '8e02cc5d34bf38fce3ccc03417e8b535c723c462', install => 'mozilla-win32-1.5-installer.exe' }, 'Mozilla Firebird 0.7' => { uri => 'http://ftp.mozilla.org/pub/mozilla.org/firebird/releases/0.7/MozillaFirebird-0.7-win32.zip', sha1 => '3dfd5a22525d6af7b4ab97cb6a250a9ef4cc1937' }, 'Mozilla Thunderbird 0.3' => { uri => 'http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/0.3/thunderbird-0.3-win32.zip', sha1 => '93f33e6addd8d95e47f92459a7a4e964b67d040a' }, 'Perl 5.8.0' => { uri => 'http://www.cpan.org/authors/id/G/GR/GRAHAMC/SiePerl-5.8.0-bin-1.0-Win32.INSTALL.exe', sha1 => 'f020bdfcb571071f4317aae6e30a50a87f4da71b', install => 'SiePerl-5.8.0-bin-1.0-Win32.INSTALL.exe' } ); my $USER_AGENT = "GetFree/0.0.3"; my $HOME = $ENV{HOMEDRIVE}; # Usually "C:" my ($SCRIPT_NAME) = $0 =~ m!([^/]+)$!; my $DEBUG = 1; ######## # # # MAIN # # # ######## # Install myself Install_myself(); # Download files foreach (keys %SW) { print "Preparing to download '$_'...\n" if $DEBUG; Download($SW{$_}->{uri}); } # Install files foreach (keys %SW) { print "Preparing to install '$_'...\n" if $DEBUG; my ($filename) = $SW{$_}->{uri} =~ m!([^/]+)$!; # get filename from uri Unzip($filename) if $filename =~ m/\.zip$/i; system($SW{$_}->{install}) if -f $SW{$_}->{install}; } # Uninstall myself Uninstall_myself(); ######## # # # SUBS # # # ######## sub Install_myself { # Copy myself to home drive if (!-f "$HOME/$SCRIPT_NAME") { # Copy myself to home dir copy("$FindBin::Bin/$SCRIPT_NAME","$HOME/$SCRIPT_NAME") or die "copy failed: $!"; # TO-DO: Add key to registry # [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] } } ### sub Uninstall_myself { # Remove myself from home drive if (-f "$HOME/$SCRIPT_NAME") { # Delete me from home dir unlink("$HOME/$SCRIPT_NAME"); # TO-DO: Delete key from registry # [HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] } } ### sub Download { # Download a file from uri (resume if interrupted) my ( $file, $fsize, $last, $mod, $req, $res, $start, $size, $time, $total, $s ); my $uri = URI->new(shift); ($file) = $uri =~ m!([^/]+)$!; # get filename from url my $ua = new LWP::UserAgent; $ua->agent( $USER_AGENT ); print "Checking remote file '$uri'...\n" if $DEBUG; $req = new HTTP::Request HEAD => $uri->as_string; $res = $ua->request( $req ); $req = new HTTP::Request GET => $uri->as_string; if (!$res->is_success) { die "Error"; # $res->status_line; } $fsize = 0; $total = $res->content_length || 0; $mod = $res->last_modified || time; print "Looking for local file '$file'...\n" if $DEBUG; if (-e $file) { my @s = stat($file); $fsize = $s[7]; my $fmod = $s[9]; if ($fmod >= $mod && $fsize >= $total) { # Completed print "Found it, and seems complete.\n" if $DEBUG; return; } elsif ($fsize < $total && $res->protocol =~ /1\.1/) { print "Found it, but seems incomplete. Appending to file '$file'\n" if $DEBUG; $size = $fsize; my $headers = $req->headers(); $headers->push_header( Range => "bytes=$fsize-" ); open(FILE, ">>$file") || return "$file: $!\n"; } } else { print "Not found. Saving as new file '$file'\n" if $DEBUG; open(FILE, ">$file") || return 0; } print "Requesting '$uri'...\n" if $DEBUG; $start = time; $last = 0; $res = $ua->request($req, sub { my ($data, $response, $protocol) = @_; print FILE $data; $time = time - $start; $size += length($data); if ($time != $last) { $last = $time; } } ); if ( $res->is_success || $res->message =~ /^Interrupted/ || $res->message =~ /^OK/) { close (FILE); my $now = time; utime $now, $now, $file; print "Finished!\n" if $DEBUG; } else { print "Transfer incomplete: '$res->message'\n\n"; } } ### sub Unzip { # Unzip a file (extract the entire tree) my $zipName = shift; die "File not found" if ! -f $zipName; my $zip = Archive::Zip->new(); print "Unzip '$zipName'...\n" if $DEBUG; my $status = $zip->read( $zipName ); die "Read of $zipName failed\n" if $status != AZ_OK; $zip->extractTree(); die "Extracting from $zipName failed\n" if $status != AZ_OK; print "Ok\n" if $DEBUG; } From mhenke em inf.ufrgs.br Mon Oct 20 06:59:11 2003 From: mhenke em inf.ufrgs.br (Marcia Henke) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Instalando modulos References: <200310181700.h9IH0BE22861@mail.pm.org> Message-ID: <3F93CE0F.8050701@inf.ufrgs.br> Olá pessoal !! Estou com dificuldades na instalação do seguinte modulo : Net::SSH::Perl. É um modulo que varias dependencias, mas que estão dando erro :-\ no comando "make test", talvez alguém pudesse me auxiliar me dando dicas de como instalar o MCPAN, para que eu baixa os módulos e suas dependencia automaticamente. Preciso desse módulo para verificar se o serviço SSH, permanece ativo , consultando-o de 5 em 5 minutos. Agradeço atenção Márcia :-) From glasswalk3r em yahoo.com.br Mon Oct 20 08:30:40 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Instalando modulos In-Reply-To: <3F93CE0F.8050701@inf.ufrgs.br> Message-ID: <20031020133040.40215.qmail@web20210.mail.yahoo.com> Oi Marcia, Digite no shell: perl -MCPAN -e shell E faça a configuração solicitada (só pede a primeira vez) e digite no novo shell: install Net::SSH::Perl Se ele começar a reclamar muito, tente force install Net::SSH::Perl Mas procure prestar atenção nas mensagens de erro para verificar o que acontece. Outra dica: mais fácil (e mais limpo) você fazer a checagem do serviço SSH rodando no servidor (se você puder) com snmp. []´s Alceu --- Marcia Henke escreveu: > Olá pessoal !! > > Estou com dificuldades na instalação do seguinte > modulo : Net::SSH::Perl. > É um modulo que varias dependencias, mas que estão > dando erro :-\ no > comando "make test", talvez alguém pudesse me > auxiliar me dando dicas de > como instalar o MCPAN, para que eu baixa os módulos > e suas dependencia > automaticamente. > Preciso desse módulo para verificar se o serviço > SSH, permanece ativo , > consultando-o de 5 em 5 minutos. > > Agradeço atenção > Márcia :-) > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From lechamps em terra.com.br Mon Oct 20 08:32:25 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Instalando modulos References: <200310181700.h9IH0BE22861@mail.pm.org> <3F93CE0F.8050701@inf.ufrgs.br> Message-ID: <3F93E3E9.5060702@terra.com.br> Marcia Henke wrote: > Olá pessoal !! > > Estou com dificuldades na instalação do seguinte modulo : Net::SSH::Perl. > É um modulo que varias dependencias, mas que estão dando erro :-\ no > comando "make test", talvez alguém pudesse me auxiliar me dando dicas de > como instalar o MCPAN, para que eu baixa os módulos e suas dependencia > automaticamente. > Preciso desse módulo para verificar se o serviço SSH, permanece ativo , > consultando-o de 5 em 5 minutos. > > Agradeço atenção Oi, Marcia. Alguns detalhes poderiam ajudar. Que erros você recebe? Como está tentando instalar? Em que sistema operacional / plataforma / versão ? você tentou usar perl -MCPAN -e 'install Net::SSH' para resolver o problema? []'z! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From ramoni em databras.com.br Mon Oct 20 08:24:04 2003 From: ramoni em databras.com.br (Ramoni) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Passwd In-Reply-To: <200309161857.35072.flavio.correa@pop.com.br> References: <20030913183006.7758de63.frighetti@cascavel.pm.org> <200309151134.32421.flavio@marquescorrea.com.br> <200309161857.35072.flavio.correa@pop.com.br> Message-ID: <200310201124.04495.ramoni@databras.com.br> Olá, alguem aqui jah tentou fazer um prog em perl para "autenticar" usuarios ? Eu estou perguntando a senha pro usuario, encriptando ela e depois checando com a do /etc/shadow mas nunca dah a mesma coisa. Uma palavra criptografada com unix_md5_crypt eh sempre igual, mas a passwd no shadow cada hora eh diferente pra mesma palavra. Alguem sabe o q eu poderia fazer ? Thanx From daniel em ruoso.com Mon Oct 20 09:53:54 2003 From: daniel em ruoso.com (Daniel Ruoso) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Passwd In-Reply-To: <200310201124.04495.ramoni@databras.com.br> References: <20030913183006.7758de63.frighetti@cascavel.pm.org> <200309151134.32421.flavio@marquescorrea.com.br> <200309161857.35072.flavio.correa@pop.com.br> <200310201124.04495.ramoni@databras.com.br> Message-ID: <1066661633.1116.2.camel@cedro> O mais aconselhável neste caso é utilizar o PAM, senão não irá funcionar se estiver rodando NIS na máquina... O módulo é Authen::PAM e o serviço PAM que vc quer usar é o pam_unix.so, que faz isso. Mesmo porque, para ler o shadow tem que ser root, e eu imagino que você não esteja querendo que seu programa rode necessariamente como root. Em Seg, 2003-10-20 às 10:24, Ramoni escreveu: > Olá, alguem aqui jah tentou fazer um prog em perl para "autenticar" usuarios ? > Eu estou perguntando a senha pro usuario, encriptando ela e depois checando > com a do /etc/shadow mas nunca dah a mesma coisa. > Uma palavra criptografada com unix_md5_crypt eh sempre igual, mas a passwd no > shadow cada hora eh diferente pra mesma palavra. > > Alguem sabe o q eu poderia fazer ? > Thanx > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm -- Atenciosamente, Daniel Ruoso Desenvolvimento de Sistemas daniel@oktiva.com.br Oktiva Telecomunicaes e Informtica From lechamps em terra.com.br Mon Oct 20 09:56:34 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Passwd References: <20030913183006.7758de63.frighetti@cascavel.pm.org> <200309151134.32421.flavio@marquescorrea.com.br> <200309161857.35072.flavio.correa@pop.com.br> <200310201124.04495.ramoni@databras.com.br> Message-ID: <3F93F7A2.4030306@terra.com.br> Ramoni wrote: > Olá, alguem aqui jah tentou fazer um prog em perl para "autenticar" usuarios ? > Eu estou perguntando a senha pro usuario, encriptando ela e depois checando > com a do /etc/shadow mas nunca dah a mesma coisa. > Uma palavra criptografada com unix_md5_crypt eh sempre igual, mas a passwd no > shadow cada hora eh diferente pra mesma palavra. > > Alguem sabe o q eu poderia fazer ? > Olá, Ramoni. Antes de mais nada, uma dica: eu não enviei nenhum código a você por que você não enviou código para a lista. =-] Eu tenho programas que sabem construir senhas para o /etc/passwd, usando a função crypt() da biblioteca padrão do perl. Para saber mais: perldoc -f crypt Você poderia tentar encriptar as senhas e validá-las através da comparação com a forma criptografada existente no /etc/passwd. (ou /etc/shadow, tanto faz). Se você precisa de uma solução para daqui a 3 minutos, pode ser a melhor saída. Por outro lado, você pode tentar usar um dos módulos Authen::PAM ou OpenPlugni::Authenticate::PAM para utilizar a API PAM para realizar operações de autenticação. Particularmente, eu acho este método mais confiável, portável e estável. Boa sorte! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From nferraz em phperl.com Mon Oct 20 09:59:31 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Instalando modulos In-Reply-To: <20031020133040.40215.qmail@web20210.mail.yahoo.com> References: <20031020133040.40215.qmail@web20210.mail.yahoo.com> Message-ID: <3F93F853.8000801@phperl.com> Alceu R. de Freitas Jr. wrote: > Digite no shell: > > perl -MCPAN -e shell > > E faça a configuração solicitada (só pede a primeira > vez) Você também pode responder "não" e aceitar a configuração automática. -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From glasswalk3r em yahoo.com.br Mon Oct 20 09:57:59 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Passwd In-Reply-To: <200310201124.04495.ramoni@databras.com.br> Message-ID: <20031020145759.83441.qmail@web20207.mail.yahoo.com> Olá Ramoni, --- Ramoni escreveu: > Olá, alguem aqui jah tentou fazer um prog em perl > para "autenticar" usuarios ? > Eu estou perguntando a senha pro usuario, > encriptando ela e depois checando > com a do /etc/shadow mas nunca dah a mesma coisa. > Uma palavra criptografada com unix_md5_crypt eh > sempre igual, mas a passwd no > shadow cada hora eh diferente pra mesma palavra. > > Alguem sabe o q eu poderia fazer ? > Thanx Parece que você está fazendo um pouco de confusão aqui: as senhas no shadow não podem mudar de uma hora para a outra. Você está pegando o trecho correto? Outra coisa: apenas versões mais novas de UNIX e Linux usam md5 para as senhas no shadow: versões velhas usam a função crypt(). Seria melhor você usar um outro método de autenticação, considerando que apenas o usuário root tem acesso de leitura ao /etc/shadow. Procure no CPAN por módulos de autenticação. Se você usa Linux, recomendo usar um módulo que autentique via PAM. []´s ===== Alceu Rodrigues de Freitas Junior -------------------------------------- glasswalk3r@yahoo.com.br http://www.imortais.cjb.net ----------------------------------------------------------------------- "You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From nferraz em phperl.com Mon Oct 20 10:40:24 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] GetFree 0.0.7 Message-ID: <3F9401E8.2020307@phperl.com> Aqui vai mais uma versão do script "getfree.pl", que baixa e instala diversos softwares livres no Windows (OpenOffice, Firebird, Thunderbird e Gaim). Para quem estiver estudando Perl, este script mostra como usar estruturas de dados, acessar a internet usando LWP::UserAgent e descompactar arquivos com o módulo Archive::Zip, executar programas externos, entre outras coisas. Disponibilizei o código-fonte no SIGL: http://www.gnubis.com.br/cgi-local/twiki/bin/view/SIGL/BaixandoArquivosDaInternet -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From nferraz em phperl.com Wed Oct 22 07:56:38 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Loop de dois em dois elementos Message-ID: <3F967E86.9080100@phperl.com> Pessoal, Aqui vai um probleminha interessante. Eu tenho uma lista: @list = qw(q w e r t y); Eu posso fazer um loop simples como este: for $el (@list) { print "$el\n"; } Mas imagine que eu queira fazer um loop de dois em dois elementos, mantendo a ordem original da lista. A maneira mais natural seria algo assim: for $el1, $el2 (@list) { print "$el1 - $el2\n"; } Mas este código não funciona. Existem vários workarounds, como por exemplo: while (my ($el1, $el2) = splice(@list, 0, 2)) { print "$el1 - $el2\n"; } Curiosamente, este é um exemplo em que a linguagem Perl não simplifica a nossa vida, tornando uma coisa simples mais difícil do que deveria ser. Um caso tão raro que resolvi compartilhar com vocês! :) (A propósito... tenho certeza de que muitos de vocês pensaram na seguinte solução: my %hash = @list; foreach (keys %hash) { print "$_ - $hash{$_}\n"; } Infelizmente, esta não seria uma solução válida, pois o hash não mantém a ordem original da lista.) -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From fglock em pucrs.br Wed Oct 22 08:33:53 2003 From: fglock em pucrs.br (Flavio S. Glock) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Loop de dois em dois elementos References: <3F967E86.9080100@phperl.com> Message-ID: <3F968741.30DC@pucrs.br> Nelson Ferraz wrote: > > Pessoal, > > Aqui vai um probleminha interessante. > > Eu tenho uma lista: > > @list = qw(q w e r t y); > > Eu posso fazer um loop simples como este: > > for $el (@list) { > print "$el\n"; > } > > Mas imagine que eu queira fazer um loop de dois em dois elementos, --- @list = qw(q w e r t y); for $el (@list) { print "$el\n" if $a = 1-$a; } --- q e t --- - Flavio S. Glock From lechamps em terra.com.br Wed Oct 22 09:43:10 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Loop de dois em dois elementos References: <3F967E86.9080100@phperl.com> Message-ID: <3F96977E.8040109@terra.com.br> Nelson Ferraz wrote: > Pessoal, > > Aqui vai um probleminha interessante. > > Eu tenho uma lista: > > @list = qw(q w e r t y); > > Eu posso fazer um loop simples como este: > > for $el (@list) { > print "$el\n"; > } > > Mas imagine que eu queira fazer um loop de dois em dois elementos, > mantendo a ordem original da lista. A maneira mais natural seria algo > assim: > > for $el1, $el2 (@list) { > print "$el1 - $el2\n"; > } > > Mas este código não funciona. > > Existem vários workarounds, como por exemplo: > > while (my ($el1, $el2) = splice(@list, 0, 2)) { > print "$el1 - $el2\n"; > } > > Curiosamente, este é um exemplo em que a linguagem Perl não simplifica a > nossa vida, tornando uma coisa simples mais difícil do que deveria ser. > > Um caso tão raro que resolvi compartilhar com vocês! :) > > (A propósito... tenho certeza de que muitos de vocês pensaram na > seguinte solução: > > my %hash = @list; > foreach (keys %hash) { > print "$_ - $hash{$_}\n"; > } > > Infelizmente, esta não seria uma solução válida, pois o hash não mantém > a ordem original da lista.) > Você pode usar um hack sujo package ACME::List::CoupleInteractor; use Exporter; use base qw/ Exporter /; our @EXPORT; our EXPORT_OK; our @ISA; sub new{ my $type = shift; my @data = @_; my $self = bless [], $type; # Garante um numero par de elementos sempre push @data, undef unless (scalar @_)%2!=0; push @{$self}, [shift, shift] while( @_ > 0 ); } sub Interact{ my $self = shift; my $code = shift; die 'Usage: $CoupleInteractor->Interact( $code_ref )'; return map $code->( $_->[0], $_->[1] ), @{$self}; } 1; package main; use ACME::List::CoupleInteractor; my @list = qw( q w e r t y ); my $ci = new ACME::List::CoupleInteractor( @list ); my $code_ref = sub { my ( $a, $b ) = ( shift, shift ); print "A: $a, B: $b\n"; } # Simples o suficiente para você? $ci->Interact( $code_ref ); __END__ -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From nferraz em phperl.com Wed Oct 22 13:25:08 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Loop de dois em dois elementos In-Reply-To: <3F968741.30DC@pucrs.br> References: <3F967E86.9080100@phperl.com> <3F968741.30DC@pucrs.br> Message-ID: <3F96CB84.7040205@phperl.com> Flavio S. Glock wrote: > Nelson Ferraz wrote: >>Mas imagine que eu queira fazer um loop de dois em dois elementos, > > @list = qw(q w e r t y); > for $el (@list) { > print "$el\n" if $a = 1-$a; > } > q > e > t Não é bem este o caso, Flavio; a idéia é pegar dois elementos de cada vez. É possível? Sim. É tão simples quanto deveria (ou poderia) ser? Não. Existe até mesmo um RFC para que isto venha a ser implementado na próxima versão da linguagem: RFC 173 - Allow multiple loop variables in foreach statements E.g.: foreach my ($x, $y, $z) (@list) { ... } The potential parsing difficulty I came up with was how to tell that foreach ($a,$b,$c) (@list) ... was not foreach $_ ($a, $b, $c) (@list) ... http://dev.perl.org/perl6/rfc/173.html -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From borders70 em erols.com Wed Oct 22 20:31:26 2003 From: borders70 em erols.com (borders70@erols.com) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] reverse the aging process now Message-ID: <200310230131.h9N1VF301641@mail.pm.org> Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20031023/2abbd76f/attachment.htm From shonorio em terra.com.br Wed Oct 22 20:28:42 2003 From: shonorio em terra.com.br (=?iso-8859-1?Q?Solli_Moreira_Honorio?=) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] =?iso-8859-1?q?D=FAvida_sobre_express=E3o_regular?= Message-ID: Pessoal, Estou estudando o livro 'Real World SQL Server Administration with Perl' do Linchi Shea - ed. Apress (www.apress.com), onde o autor usa e abusa das expressões regulares para monitorar e adminstrar o MS SQL. Bom, pra mim expressões regulares são pra lá de abstratas em alguns casos, parecendo até mesmo uma outra linguaguem, e dentre estas encontrei uma expressão no livro que eu não entendi nadinha o que ela está fazendo e por isto eu gostaria de pedir ajuda aos monges. O cara vai ler um arquivo com dados parecidos como "Index Scan(OBJECT:([pubs].[dbo].[jobs].[jobs_ix])" e aí o código faz a manipulação maluca abaixo. if (m{^[\s | \d | \|]*\|\-\- ( Clustered\s+Index\s+Seek | Clustered\s+Index\s+Scan | Clustered\s+Index\s+Delete | Clustered\s+Index\s+Update | Clustered\s+Index\s+Insert | Index\s+Seek | Index\s+Scan | Index\s+Delete | Index\s+Update | Index\s+Insert | Table\s+Scan ) \(OBJECT\:\( ( (\[([^\]] | \]\])+\]) # database name \.\[([^\]] | \]\])+\] # owner \.\[([^\]] | \]\])+\] # object (\.\[([^\]] | \]\])+\])? # index ) \) }ix) A primeira coisa que eu não entendi é o 'm{}ix', que raio é isto ? É um match ? e depois o resto .... também fiquei boiando. Abraços, Solli M. Honorio -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20031022/42c266e1/attachment.htm From lechamps em terra.com.br Thu Oct 23 14:03:13 2003 From: lechamps em terra.com.br (Luis Campos de Carvalho) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] =?ISO-8859-1?Q?D=FAvida_sobre_express=E3o_?= =?ISO-8859-1?Q?regular?= References: Message-ID: <3F9825F1.1010006@terra.com.br> Solli Moreira Honorio wrote: > Pessoal, > > Estou estudando o livro 'Real World SQL Server Administration with Perl' > do Linchi Shea - ed. Apress (_www.apress.com_ > ), onde o > autor usa e abusa das expressões regulares para monitorar e adminstrar o > MS SQL. > > Bom, pra mim expressões regulares são pra lá de abstratas em alguns > casos, parecendo até mesmo uma outra linguaguem, e dentre estas > encontrei uma expressão no livro que eu não entendi nadinha o que ela > está fazendo e por isto eu gostaria de pedir ajuda aos monges. > > O cara vai ler um arquivo com dados parecidos como "Index > Scan(OBJECT:([pubs].[dbo].[jobs].[jobs_ix])" e aí o código faz a > manipulação maluca abaixo. > > if (m{^[\s | \d | \|]*\|\-\- > > ( Clustered\s+Index\s+Seek | Clustered\s+Index\s+Scan | > > Clustered\s+Index\s+Delete | Clustered\s+Index\s+Update | > > Clustered\s+Index\s+Insert | Index\s+Seek | Index\s+Scan | > > Index\s+Delete | Index\s+Update | Index\s+Insert | Table\s+Scan > > ) > > \(OBJECT\:\( > > ( > > (\[([^\]] | \]\])+\]) # database name > > \.\[([^\]] | \]\])+\] # owner > > \.\[([^\]] | \]\])+\] # object > > (\.\[([^\]] | \]\])+\])? # index > > ) > > \) > > }ix) > > A primeira coisa que eu não entendi é o 'm{}ix', que raio é isto ? É um > match ? e depois o resto .... também fiquei boiando. > Oi, Solli. Desculpe a demora... eu estou um pouco sobrecarregado. Sim, "m{...}xi" é um match, e um bem complicado. =-] Eu vou tentar reescrever o match sem usar a opção "/x", talvez fique mais simples de você entender: m{^[\s|\d|\|]*\|\-\-(Clustered\s+Index\s+Seek|Clustered\s+Index\s+Scan|Clustered\s+Index\s+Delete|Clustered\s+Index\s+Update|Clustered\s+Index\s+Insert|Index\s+Seek|Index\s+Scan|Index\s+Delete|Index\s+Update|Index\s+Insert|Table\s+Scan)\(OBJECT\:\(((\[([^\]]|\]\])+\])\.\[([^\]]|\]\])+\]\.\[([^\]]|\]\])+\](\.\[([^\]]|\]\])+\])?)\)}i Como você pode notar, este é um Match BEM comprido. A opção "/x" serve para 'eXtender' as expressões regulares para que ela aceite e ignore espaços em branco não-quotados e comentários no estilo do perl (de "#" até o final da linha). Isso permite que a expressão regular fique mais legível e conseqüêntemente mais simples de manter. Agora, quanto às chaves ("{" e "}"), que delimitam a expressão: Uma expressão regular pode ser delimitada por "/", ou por qualquer outro caracter que você deseje, desde que você indique claramente ao Perl que o que segue é uma expressão regular, usando para isso o operador "m" (de "match"). Assim, escrever $thing =~ /thing/; ou $thing =~ m,thing,; ou $thing =~ m;thing;; é exatamente a mesma coisa... Espero que isso ajude você a entender a sua expressão... []'z! -- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Luis Campos de Carvalho is Computer Scientist, PerlMonk [SiteDocClan], Cascavel-pm Moderator, Unix Sys Admin && Certified Oracle DBA http://br.geocities.com/monsieur_champs/ =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= From glasswalk3r em yahoo.com.br Thu Oct 23 16:09:56 2003 From: glasswalk3r em yahoo.com.br (=?iso-8859-1?q?Alceu=20R.=20de=20Freitas=20Jr.?=) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Dúvida_sobre_expressão_regular In-Reply-To: <3F9825F1.1010006@terra.com.br> Message-ID: <20031023210956.97413.qmail@web20204.mail.yahoo.com> Só para complementar, o guia de expressões regulares do Aurélio é muito bom! http://guia-er.sourceforge.net/guia-er.html Ele apresenta as expressões regulares de uma forma que você não fica com medo de ter edemas cerebrais. ;-) []´s Alceu --- Luis Campos de Carvalho escreveu: > Solli Moreira Honorio wrote: > > Pessoal, > > > > Estou estudando o livro 'Real World SQL Server > Administration with Perl' > > do Linchi Shea - ed. Apress (_www.apress.com_ > > > ), > onde o > > autor usa e abusa das expressões regulares para > monitorar e adminstrar o > > MS SQL. > > > > Bom, pra mim expressões regulares são pra lá de > abstratas em alguns > > casos, parecendo até mesmo uma outra linguaguem, e > dentre estas > > encontrei uma expressão no livro que eu não > entendi nadinha o que ela > > está fazendo e por isto eu gostaria de pedir ajuda > aos monges. > > > > O cara vai ler um arquivo com dados parecidos como > "Index > > Scan(OBJECT:([pubs].[dbo].[jobs].[jobs_ix])" e aí > o código faz a > > manipulação maluca abaixo. > > > > if (m{^[\s | \d | \|]*\|\-\- > > > > ( Clustered\s+Index\s+Seek | > Clustered\s+Index\s+Scan | > > > > Clustered\s+Index\s+Delete | > Clustered\s+Index\s+Update | > > > > Clustered\s+Index\s+Insert | Index\s+Seek | > Index\s+Scan | > > > > Index\s+Delete | Index\s+Update | Index\s+Insert | > Table\s+Scan > > > > ) > > > > \(OBJECT\:\( > > > > ( > > > > (\[([^\]] | \]\])+\]) # database name > > > > \.\[([^\]] | \]\])+\] # owner > > > > \.\[([^\]] | \]\])+\] # object > > > > (\.\[([^\]] | \]\])+\])? # index > > > > ) > > > > \) > > > > }ix) > > > > A primeira coisa que eu não entendi é o 'm{}ix', > que raio é isto ? É um > > match ? e depois o resto .... também fiquei > boiando. > > > > Oi, Solli. > > Desculpe a demora... eu estou um pouco > sobrecarregado. > > Sim, "m{...}xi" é um match, e um bem complicado. > =-] > > Eu vou tentar reescrever o match sem usar a opção > "/x", talvez fique > mais simples de você entender: > > m{^[\s|\d|\|]*\|\-\-(Clustered\s+Index\s+Seek|Clustered\s+Index\s+Scan|Clustered\s+Index\s+Delete|Clustered\s+Index\s+Update|Clustered\s+Index\s+Insert|Index\s+Seek|Index\s+Scan|Index\s+Delete|Index\s+Update|Index\s+Insert|Table\s+Scan)\(OBJECT\:\(((\[([^\]]|\]\])+\])\.\[([^\]]|\]\])+\]\.\[([^\]]|\]\])+\](\.\[([^\]]|\]\])+\])?)\)}i > > Como você pode notar, este é um Match BEM > comprido. > > A opção "/x" serve para 'eXtender' as expressões > regulares para que > ela aceite e ignore espaços em branco não-quotados e > comentários no > estilo do perl (de "#" até o final da linha). Isso > permite que a > expressão regular fique mais legível e > conseqüêntemente mais simples de > manter. > > Agora, quanto às chaves ("{" e "}"), que > delimitam a expressão: > > Uma expressão regular pode ser delimitada por > "/", ou por qualquer > outro caracter que você deseje, desde que você > indique claramente ao > Perl que o que segue é uma expressão regular, usando > para isso o > operador "m" (de "match"). > > Assim, escrever > > $thing =~ /thing/; > > ou > > $thing =~ m,thing,; > > ou > > $thing =~ m;thing;; > > é exatamente a mesma coisa... > > Espero que isso ajude você a entender a sua > expressão... > []'z! > -- > =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > Luis Campos de Carvalho is Computer Scientist, > PerlMonk [SiteDocClan], Cascavel-pm Moderator, > Unix Sys Admin && Certified Oracle DBA > http://br.geocities.com/monsieur_champs/ > =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > > _______________________________________________ > Cascavel-pm mailing list > Cascavel-pm@mail.pm.org > http://cascavel.pm.org/mailman/listinfo/cascavel-pm Yahoo! Mail - o melhor webmail do Brasil http://mail.yahoo.com.br From nferraz em phperl.com Thu Oct 23 16:08:31 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] =?ISO-8859-1?Q?D=FAvida_sobre_express=E3o_?= =?ISO-8859-1?Q?regular?= In-Reply-To: <3F9825F1.1010006@terra.com.br> References: <3F9825F1.1010006@terra.com.br> Message-ID: <3F98434F.3020300@phperl.com> Luis Campos de Carvalho wrote: > Assim, escrever > > $thing =~ /thing/; > > ou > > $thing =~ m,thing,; > > ou > > $thing =~ m;thing;; > > é exatamente a mesma coisa... Até recentemente eu sempre escrevia as expressões regulares assim: $foo =~ /bar/; Há algumas semanas, quando fui apresentar a palestra sobre Perl na UNIFIEO, eu resolvi utilizar a sintaxe "m//", por uma questão de didática e mnemônica (m = match, s = substitute): $foo =~ m/bar/; A primeira vantagem que eu percebi, é que esta sintaxe nos faz lembrar que este operador tem um nome, é o "operador match". :) Como o Luis comentou, o operador "m//" permite a utilizacão de diferentes delimitadores: $foo =~ m/bar/; $foo =~ m!bar!; $foo =~ m{bar}; Mais do que isso, eu diria que o operador "m//" *incentiva* o uso de diferentes delimitadores, da mesma forma como o q// e o qq//. (Nestes dois casos, nós estamos tão acostumados a modificar o delimitador que nem lembramos qual é o padrão!) $string = q/Jon 'Maddog' Orwant/; $string = q{Jon 'Maddog' Orwant}; $string = q(Jon 'Maddog' Orwant); Por uma questão de consistência e para aumentar a legibilidade do código, acabei adotando o "m//" ao invés de "//", principalmente quando eu tenho que explicar o código para alguém. Para concluir, um trecho do Camel Book: "Although we write m// and s/// here, you'll recall that you can pick your own quote characters. On the other hand, for the m// operator only, the m may be omitted if the delimiters you pick are in fact slashes. (You'll often see patterns written this way, for historical reasons.)" -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From nferraz em phperl.com Thu Oct 23 20:27:36 2003 From: nferraz em phperl.com (Nelson C. T. Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] =?ISO-8859-1?Q?D=FAvida=5Fsobre=5Fexpress=E3o=5F?= =?ISO-8859-1?Q?regular?= In-Reply-To: <20031023210956.97413.qmail@web20204.mail.yahoo.com> References: <20031023210956.97413.qmail@web20204.mail.yahoo.com> Message-ID: <3F988008.8020003@phperl.com> Alceu R. de Freitas Jr. wrote: > Só para complementar, o guia de expressões regulares > do Aurélio é muito bom! > > http://guia-er.sourceforge.net/guia-er.html > > Ele apresenta as expressões regulares de uma forma que > você não fica com medo de ter edemas cerebrais. ;-) Um comentário final: invista o tempo que for necessário para aprender expressões regulares, pois o retorno vale a pena. Você será muito mais produtiva sempre que tiver que lidar com textos, e nunca mais pensará em linguagens de programacão da mesma forma. -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From nferraz em phperl.com Wed Oct 29 06:22:40 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] Criando applets com XML Message-ID: <3F9FB110.7010307@phperl.com> Pessoal, Encontrei um artigo interessante no IBM developerWorks, e gostaria de compartilhar com vocês. Até hoje, se quiséssemos criar uma aplicação web com uma interface mais rica, precisaríamos utilizar um applet em Java. A solução apresentada por este artigo não é tão amplamente disponível quanto o Java, mas tem a vantagem da simplicidade (e também é multiplataforma): --- Create Web applets with Mozilla and XML Mozilla's simple and flexible XUL saves time when building Java-less applets To go beyond simple HTML, historically the only options have been to use Java technology or plug-ins. Now, you have a new way -- write and display applications natively in XML. The Mozilla platform provides such a mechanism. In this article, Nigel McFarlane introduces XUL (the XML User-interface Language). XUL is set of GUI widgets with extensive cross-platform support that are designed for building GUI elements for applications that have traditional, non-HTML GUIs. http://www-106.ibm.com/developerworks/web/library/wa-appmozx/?ca=dgr-lnxw02MozillaXMLApplets --- Vejam também: http://www.xulplanet.com/ Apenas como curiosidade, a Microsoft está disponibilizando um conceito semelhante chamado "XAML" em a nova versão do Windows, o Longhorn: http://www.google.com/search?q=xaml+site%3Amicrosoft.com Ao que tudo indica, o futuro das aplicações web envolverá algum tipo de linguagem de markup para criação de interfaces. -- []s Nelson ________________________________________________________________ Nelson Ferraz GNU BIS: http://www.gnubis.com.br PhPerl: http://www.phperl.com From nferraz em phperl.com Wed Oct 29 20:08:10 2003 From: nferraz em phperl.com (Nelson Ferraz) Date: Mon Aug 2 21:26:49 2004 Subject: [Cascavel-pm] =?iso-8859-1?q?Aplica=E7=E3o_em_XUL?= Message-ID: <3FA0728A.50509@phperl.com> Pessoal, Aqui vai um pequeno "Hello World" em Perl + XUL: #!/usr/bin/perl print "Content-type: application/vnd.mozilla.xul+xml\n\n"; print q{