Ir para conteúdo
Fórum Script Brasil

Fvox

Membros
  • Total de itens

    97
  • Registro em

  • Última visita

Sobre Fvox

  • Data de Nascimento 02/05/1992

Perfil

  • Gender
    Male
  • Location
    /usr/bin/

Fvox's Achievements

0

Reputação

  1. Meu caro, isso não é uma dúvida, é um trabalho. Dica: contrate um freelancer. []'s
  2. Hi. Gabriel, o Perl possui n soluções para resolver o teu problema, mas você está buscando uma solução com um certo nível de complexidade, logo precisará de algum pouco conhecimento da linguagem. Eu te recomendaria utilizar o módulo Daemon::Generic, um framework para criação de daemons que já implementa comandos start/stop/version/restart/reload e etc, controle de PID, mensagem de help e etc. Basta criar um módulo com métodos "gd_preconfig()", "gd_run()", e etc. A documentação no CPAN será sua amiga! Na execução do daemon, você precisará ficar listando o diretório sem parar, certo? Para estas tarefas eu gosto muito de utilizar o timer() do AnyEvent, um framework de event loop que você ainda vai ouvir falar muito ao mexer com Perl. Para o log, você pode utilizar o Log::Log4perl no modo easy para implementar as principais funções de debug(), error(), etc. Olha, são duas e meia da manhã e estou suave, tomando um café. Então vou criar um esqueleto para que você possa entender melhor como eu o faria: #!/usr/bin/env perl package MeuDaemon; use strict; use warnings q(all); use FindBin qw($RealBin $Script); use AnyEvent; use Daemon::Generic; use Log::Log4perl qw(:easy); newdaemon( progname => $Script, pidfile => "$RealBin/$Script.pid" ); sub gd_preconfig { Log::Log4perl->easy_init({ level => $DEBUG, file => "STDOUT", #file => "$RealBin/$Script.log", }); return (); } sub gd_run { my $self = shift; my $cv = AnyEvent->condvar; my $w = AnyEvent->timer( after => 0.0, interval => 1.0, cb => sub { INFO "Buscando arquivos no diretorio..."; my @files = glob("/home/fvox/filesToProc/*"); for my $file (@files) { DEBUG "Processando ${file}..."; } INFO "Fim do processo!"; }, ); $cv->wait; } 1;Execução: O script já funciona em loop, buscando arquivos no diretório a cada 1 segundo. O AnyEvent cai como uma luva para se trabalhar com I/O non blocking: isto implica que o processo, enquanto ficar em espera, não consumirá 100% dos clocks da CPU. =p Agora cabe a você personalizar e otimizar o teu daemon, como por exemplo, dividindo a lista de arquivos encontrados numa queue de forks. Claro que o CPAN te oferece zilhões de opções de módulos para fazer essas tarefas que você precisa e nos exemplos que criei foram utilizados módulos do meu gosto particular. =p Espero que eu tenha ajudado. E boa sorte no desenvolvimento! ;-) []'s
  3. Fvox

    Conexão WEB

    Hi. Há uma infinidade de libs pra trabalhar com http. Uma boa introdução é este tutorial: http://são-paulo.pm.org/artigo/2010/utiliz...criarwebspiders Vale lembrar de o Facebook, por exemplo, possui toda uma API pra integração e é válido procurar um módulo pra se trabalhar com ela. ;-)) []'s
  4. Fvox

    Prompt abre e fecha

    Hi. Tá usando Windows e abrindo com dois cliques, né? Ué, o programa fez o que você mandou. Executou a rotina e terminou. Se quiser colocar uma "pausa" pra digitar um caractere antes de fechar, termine o código com um: <STDIN>; []'s
  5. Fvox

    Ajuda

    Hi. O ideal é modelar o algoritmo pra executar a ação fora e dentro do while. Mas, dá pra fazer um XGH e usar o "last" pra sair do while caso a opção seja igual a "-1". Algo tipo isso: #!/usr/bin/env perl use strict; use warnings; use feature qw(say); my $number1l = 0; my $number2q = 0; my $m1 = 0; while ($number1l != "-1") { say "Digite os litros usados (-1 para fim):"; chomp ($number1l = <STDIN>); last if $number1l eq '-1'; say "Digite os quilômetros dirigidos:"; chomp ($number2q = <STDIN>); $m1 = $number2q / $number1l; say "Os quilômetros/litro para esse tanque foram: " . $m1; } say "Média total:\n$m1"; []'s
  6. Hi. Tenho um que fiz há algum tempo que implementa um cachezinho numa hashref estática. Não é nada mas fica muito mais rápido que a implementação comum: use strict; use warnings; use feature qw(say state); sub fib { state $m = { 1 => 1, 2 => 1, }; return $m->{$_[0]} //= fib($_[0] - 1) + fib($_[0] - 2); } say fib 45; []'s
  7. Fvox

    Hello World no prompt

    Hi. Amigo, aspas simples (\x27) são diferentes deste caractere de quotes que você está usando que parece um acento mas não é (\xe2\x80\x99). Funcionará se você utilizar simple quotes de verdade: perl -e 'print "Hello World!\n";' []'s
  8. #!/usr/bin/env perl use strict; use warnings; use feature 'say'; use Archive::Zip qw(:ERROR_CODES); my $zip = Archive::Zip->new; if($zip->read('Downloads/51940-51940.ZIP') == AZ_OK) { my @files = (); push @files, $_->fileName for $zip->members(); say 'Quantidade de arquivos: ' . scalar @files; } else { say 'Não foi possível ler o arquivo zip informado!'; } []'s
  9. Fvox

    Dúvida de iniciante

    Hi. Sei que a dúvida já foi resolvida, mas vale deixar a nível de conhecimento que para setar o diretório dos módulos do Perl, devemos inserir o path no array @INC [perlvar at perldoc]. []'s
  10. Hi. Você pode resolver isso com expressões regulares... chomp(my $in = <STDIN>); if($in =~ /^\d+$/) { print "O programa deve fazer algo aqui\n"; } else { print "Insira apenas números!\n"; } []'s
  11. Hi. Hmm, tem um mini tutorialzinho lá no site do próprio ActivePerl mesmo. http://community.activestate.com/faq/activ...-and-apache-cgi []'s
  12. Quase todo curso de computação é puramente teórico. Em CC você vai ter uma visão excelente do geral. Cabe exclusivamente à você você ir mais a fundo atrás de conhecimento. Lembre-se que em programação temos uma vasta gama de linguagens por aí. Independente do curso você vai pegar o básico de uma ou duas, mas a escolha da linguagem que você realmente vai aprender é só sua. []'s
  13. This? my @a = split / /, <DATA>; print 'Item 1: ', $a[0], "\n"; print 'Item 2: ', $a[1], "\n"; __DATA__ 12 20 35 50 Output: []'s
  14. Fvox

    função toXml()

    Isso é porque acaba o documento XML "cachorro" e você inicia o "vaca" em seguida. Se colocar apenas o Cachorro, ou apenas a Vaca, é provável que funcionará. Não se coloca dois documentos em um só. []'s
  15. Hmm... Hora de brincar com um pouco de assincronismo então. Há diversos modos de se fazer isso, mas acho que forking é o mais simples. Faremos um script que executará os outros simultaneamente. Lembrando que, por ser simultâneo, não há controle de qual executará primeiro. Todos serão disparados juntos! #!/usr/bin/env perl use strict; use warnings; my @childs = (); my @files = qw(Ouvinte.pl Estação1.pl Estação2.pl Estação3.pl); for(@files) { my $pid = fork; if($pid) { push @childs, $pid; } elsif($pid == 0) { exec $^X . ' ' . $_; exit(0); } else { print "não foi possivel realizar a operacao: $!\n"; } } for(@childs) { waitpid($_, 0); }
×
×
  • Criar Novo...