[Perl] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Написал скриптик который из файла коиентов выводит по ним стату
    но не пойму как убрать эти строки из файла в который выводится.

    HTTP/1.1 200 OK
    Connection: close
    Date: Wed, 02 Jul 2008 12:42:54 GMT
    Server: Apache
    Content-Type: text/plain; charset=KOI8-R
    Client-Date: Wed, 02 Jul 2008 12:39:06 GMT
    Client-Peer: 217.119.16.91:80
    Client-Response-Num: 1
    Client-Transfer-Encoding: chunked

    как от нх извабиться? и можно ли сменить кодировку когда выводим в файл?

    вот скрипт

    #!/usr/bin/perl
    use strict;
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
    open my $FILE, '<', 'clients.txt' or die "Open error: $!\n";
    my @f = <$FILE>;
    chomp @f;
    close $FILE;
    foreach my $name(@f) {
    my $req = $ua->get("http://site/cgi-bin/trstat.pl?code=$name&month=2008-06")->as_string;
    open OUT, '>',$name.'.txt';
    print OUT $req;
    close OUT;
    }
     
    #581 svesve, 2 Jul 2008
    Last edited: 2 Jul 2008
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Насчет кодировки
    use Encode qw/encode decode/;
    потом
    print FILE decode('KOI8-R',$req);

    А чтобы вытаскивать только то что тебе нужно используй регулярки
     
    _________________________
    1 person likes this.
  3. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    content вместо as_string. в чужих скриптах такого не было? ;)
     
  4. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    svesve, попробуй без хедеров так:
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    use LWP::UserAgent;
    use HTTP::Request;
    
    my $ua = LWP::UserAgent->new;
    open my $FILE, '<', 'clients.txt' or die "Open error: $!\n";
    my @f = <$FILE>;
    chomp @f;
    close $FILE;
    my ($req, $res, $content, $OUT);
    my $url = 'http://site/cgi-bin/trstat.pl';
    foreach my $name(@f) {
      $req = HTTP::Request->new (GET => $url . "?code=$name&month=2008-06");
      $req->content_type ('text/html');
      $res = $ua->request ($req);
      die "Can't get url $url: " . $res->status_line . "\n" unless $res->is_success;
      $content = $res->content;
      # тут, если нужно, производится парсинг полученного результата
      open $OUT, '>', $name . '.txt';
      print $OUT $content;
      close $OUT;
    }
    
     
    #584 krypt3r, 3 Jul 2008
    Last edited: 3 Jul 2008
    1 person likes this.
  5. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Спасибо за помощь! но так скрипт не работает ))
     
    1 person likes this.
  6. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    svesve, я поправил пост, смотри код
     
  7. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    во теперь робит все ) спс
    единственно когда кодировку в коцне перевожу ругается на что то(Wide character in print at test.pl line 24.) но это фигня главное работает ))
     
  8. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Теперь такой вопрос я хочу передать через форму параметр скрипту тобишь чтоб каждый раз не лазить менять date хотелось бы его передать через форму
    подскажите как будет это выглядеть?
     
    #588 svesve, 3 Jul 2008
    Last edited: 3 Jul 2008
  9. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    $date замени на :
    Code:
    ${ \join '-' => 1900+(localtime)[5] => (('01'..'12')[(localtime)[4]]) };
    
    xD
     
    #589 demonoid, 3 Jul 2008
    Last edited: 3 Jul 2008
  10. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Там дата должна не текущая быть а ту которую надо ) хД
     
  11. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    "чтобы правильно задать вопрос, надо знать половину ответа" ....
    правильно выражать свои мысли тоже целая наука , перефразируй - с расстановкой запятых.А то не чего непонятно , чёрт ногу сломает.
    помогу чем смогу xD
     
  12. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    как можно вывести переменную содержимого файла не в массив а в строку
     
  13. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Code:
    my $f;
    open FILE ,'file.txt' or die $!;
    {
        local $/ = undef;
        $f = <FILE>;
    }
    close FILE;
    $f - скаляр в котором содержание файла 'file.txt'
     
    1 person likes this.
  14. NeReVaR

    NeReVaR New Member

    Joined:
    16 May 2008
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Всем привет. У меня такой вот вопросик..
    Для того, чтобы добавить новый crontab - я создаю новый файл формата кронтаба, и теперь нужно запустить "CRONTAB /path.../myfile". Так вот - так запустить/выполнить любую команду в PHP?? Пробовал system() иexec(), но они почему-то не работают..
     
  15. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Ты по-моему промахнулся разделом немного :)
    PHP != Perl, и Crontab != Perl ;)
     
  16. svesve

    svesve Elder - Старейшина

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    Помогите решить такую задачу
    есть скрипт обрабатывающий статистику все это дело крутиться на IIS
    он из файла берет данные клиентов и собирает статистику по ним.иногда бывают такие клиенты для обработки которых надо более чем 5 минут..возможно ли в данном скрипте реализовать пропуск таких клиентов? тобишь таймаут сделать?!
    Code:
    #!/usr/bin/perl -w
    
    use strict;
    use warnings;
    use LWP::UserAgent;
    use HTTP::Request;
    use Encode qw/encode decode/;
    
    print "content-type: text/html \n\n";
    my $query = $ENV{QUERY_STRING};
    my $ua = LWP::UserAgent->new;
    my ($req, $res, $content, $OUT);
    my $url = 'http://site/cgi-bin/trstat.pl';
    my $post=$ENV{'QUERY_STRING'};
    open my $FILE, '<', '/inetpub/wwwroot/cl/clients.txt' or die "Open error: $!\n";
    my @f = <$FILE>;
    chomp @f;
    close $FILE;
    
    foreach my $name(@f) {
      $req = HTTP::Request->new (GET => $url . "?code=$name&month" .$post);
      $req->content_type ('text/html');
      $res = $ua->request ($req);
      die "Can't get url $url: " . $res->status_line . "\n" unless $res->is_success;
      $content = $res->content;
      open $OUT, '>','/inetpub/wwwroot/cl/res/' . $name.''.$post. '.txt';
      print $OUT decode('KOI8-U',$content);
      close $OUT;
      }
      print "Все готово,чтобы посмотреть отчеты нажмите  <a href=http://192.168.100.211/cl/res/>сюда</a>";
     
  17. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    Народ,такая ошибка вот :


    C:\>suka.pl
    "" is not exported by the Socket module
    Can't continue after import errors at C:/Perl/lib/IO/Socket.pm line 36
    BEGIN failed--compilation aborted at C:\suka.pl line 5.

    suka.pl (Исполняемый фаил :ДДД).

    Сам код скрипта такой:

    #! /usr/bin/perl

    use IO::Socket

    my $server = shift;
    my $fh = IO::Socket::INET->new($server);
    my $line = <$fh>;
    print $line;

    Только начинаю программировать,вот :). Юзаю последнюю версию интерпретатора ActivePerl на Windows XP Professional )
     
  18. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    как вывести все значения массива в одну строку
     
  19. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27

    2 ZET36
    вопрос весьма серьёзный xD

    Code:
    $ perl -e '@a = ('a'..'z');print @a,"\n"'
    abcdefghijklmnopqrstuvwxyz
    $ 
    
    2 Велемир
    Code:
    use IO::Socket[COLOR=Red];[/COLOR]
     
    #599 demonoid, 8 Jul 2008
    Last edited: 8 Jul 2008
    1 person likes this.
  20. ZET36

    ZET36 Elder - Старейшина

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    demonoid Извени я неправильно поставил вопрос я имел ввиду преобразовать все значения массива в один скаляр, уже нашол решение через join (), но всёравно спасибо
     
    #600 ZET36, 8 Jul 2008
    Last edited: 8 Jul 2008
Thread Status:
Not open for further replies.