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

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

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

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
  2. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Типо того?
    PHP:
    #!/usr/bin/perl 
    @array = ('apple','asdas','123123d','sda2122d12','sad12d12e','tomato','orange'); #Создаем массив
    $size = @array; #Получаем размер массива
    $str 'tomato'#Строку по которой ищем индекс
    for ($i=0;$i<$size;$i++) {
        if (
    $str eq $array[$i]) {
            print 
    "Index of $str : ".$i;
        }
    }
     
  3. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    спасибо ребята всем +5
     
  4. $p01nt

    $p01nt Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    116
    Likes Received:
    20
    Reputations:
    1
    простенький вопрос . В общем я скачиваю хтмл страничку и выдергиваю все от тега до тега - все ок НО выдергивается только один раз , нужен цикл , как реализовать ?

    КОД :

    open(FIL,">sait.txt");
    @loleg=$content =~m {<[<th>]+/?>(.+?)</?[\/th]+>};
    print FIL @loleg;
     
  5. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    open(FIL,">sait.txt");
    @loleg=$content =~m {<[<th>]+/?>(.+?)</?[\/th]+>}g;
    my $i = 0;
    foreach $line (@loleg) { $lolarr[$i] = $line; $i++;}
    print FIL @loleg;
     
    #325 Piflit, 23 Feb 2008
    Last edited: 23 Feb 2008
  6. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> foreach $line (@loleg) { $lolarr[$i] = $line; $i++;}

    можно поинтересоваться, в чем заключается глубинный смысл этой строки ? +)
     
  7. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    if($i == 1){$i = 1;}

    ммм... узнаем длину массива... хз)
     
    2 people like this.
  8. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    >> ммм... узнаем длину массива... хз)

    и для этого ты создал еще один масив и переложил в него в цикле по одному все элемены массива, чтоб пересчитать их ??
    /me ф шоке, честно говоря.. ))

    з.ы. длина массива = scalar @massiv
    +)
     
    2 people like this.
  9. $p01nt

    $p01nt Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    116
    Likes Received:
    20
    Reputations:
    1
    сори народ я протупил , нужно было параметр g (глобальный поиск) использовать .

    @loleg=$content =~m {<[<th>]+/?>(.+?)</?[\/th]+>}g;
     
  10. $p01nt

    $p01nt Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    116
    Likes Received:
    20
    Reputations:
    1
    и еще один вопросик от меня . авторизируюсь на сайте xaker.ru , с авторизацией вроде все ок . Как получить урл на который меня перебрасывает после авторизации ?

    http://paste.org.ru/?j8xlt9
     
  11. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    $p01nt

    >> $url = '?????????????';
    >> $content = get $url;

    вот это не понял к чему.. раз начал использовать io::socket, то юзай его и дальше..
    получаешь ответ своего пост-запроса:

    $sock->recv($content, 400);

    и глядишь в $content нужные заголовки..
     
  12. biophreak

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

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    $p01nt: Нужный тебе заголовок Location:
     
  13. $p01nt

    $p01nt Elder - Старейшина

    Joined:
    19 Feb 2008
    Messages:
    116
    Likes Received:
    20
    Reputations:
    1
    и опять я :) вообщем теперь вопрос по парсингу странички .
    document.forms.auth.action="http://******.ru/au/authen.phtml?u=случайное значение &s=&i=0.0&a_cd=случайное значение";

    надо вытащить u=случайное значение &s=&i=0.0&a_cd=случайное значение

    получается только http://****.ru/au/authen.phtml?u=*****&s=&i=0.0&a_cd=******
    юзаю @mass=$content =~ m/document.forms.auth.action="(\S+)"/i;
     
  14. FooBar

    FooBar Banned

    Joined:
    28 Jan 2008
    Messages:
    13
    Likes Received:
    6
    Reputations:
    -5
    http://www.codenet.ru/webmast/perl/regex.php читать до просвятления
     
  15. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Если тебе нужно получить только строку:

    u=СТРОКА&s=&i=0.0&a_cd=СТРОКА
    То вот тебе скрипт:
    PHP:
     #!/usr/bin/perl

     
    use Socket;

    $host="www_САЙТ_ru"#Замени на нужный тебе (Я уже знаю, какой тебе нужен и уже его проверил ) ^^
    $port="80";

    socket(SOCKPF_INETSOCK_STREAMgetprotobyname('tcp'));

    $iaddr inet_aton($host);
    $paddr sockaddr_in($port$iaddr);

    connect(SOCK$paddr);

    $header "GET /index.phtml HTTP/1.0\r\n"
    ."User-Agent: Opera/10.84 (Windows NT 5.1; U; ru)\r\n"
    ."Host: $host\r\n"
    ."Referer: http://chicks-for-hackers.com/\r\n"
    ."Proxy-Connection: close\r\n"
    ."Content-type: application/x-www-form-urlencoded\r\n\r\n";

    send (SOCK$header0);

    @
    data=<SOCK>; 
    close(SOCK);

    $size = @data;
    for (
    $i=0;$i<$size;$i++) {

    $str=@data[$i]; 

     if (
    $str =~m/document.forms.auth.action/) { #Обрабатываем ответ, выдираем строчки, которые соответсвуютт шаблону

    @parse split("[?]",$str); #Разделяем строчку, тоесть в первый элемент массива parse будет строка до вопросительного знака, а второй элемент после, то что нам нужно

    $out = @parse_need[1]; #Тут наша строка + 4 символа - "; и два пробельных 

    $out substr($out,0length($out)-4); #Убираем 4 последних символа

    print $out#Выводим результат

    exit; #Завершаем работу скрипта, т.к. другие строчки нас не интересуют

      
    }

    }

     
  16. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    Code:
    print $2 if $content =~ m|document.forms.auth.action="http://******.ru/au/authen.phtml?u=(.*?)&s=&i=0.0&a_cd=(.*?)";|;
     
    1 person likes this.
  17. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Мде Digimortal
    Привиди полный скрипт

    + Почему у тебя Вопросительный знак в голом виде?
     
    #337 bul.666, 26 Feb 2008
    Last edited: 26 Feb 2008
    1 person likes this.
  18. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    Code:
    $content = '
    
    lalala
    		qwerty;
    ssss
    aaaa;
    dddd;
    xcvxcvxcvdocument.forms.auth.action="http://123.ru/au/authen.phtml?u=lalala&s=&i=0.0&a_cd=123abc";
    
    lalala
    hekihekiheki
    
    ';
    
    
    print $1, ' ', $2 if $content =~ m|document\.forms\.auth\.action=\"http://123\.ru/au/authen\.phtml\?u=(.*?)\&s=\&i=0\.0\&a_cd=(.*?)\";|;
     
    #338 Digimortal, 26 Feb 2008
    Last edited: 26 Feb 2008
  19. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    что лучше юзать, Lwp, сокеты или еще что-то?
     
  20. FooBar

    FooBar Banned

    Joined:
    28 Jan 2008
    Messages:
    13
    Likes Received:
    6
    Reputations:
    -5
    если тебе нужно работать с http или ftp протколом то LWP наиболее удобен, для всего остального сокеты (либо соответствующие модули которых на cpan.org полно), а больше ничего и нет 8)
     
Thread Status:
Not open for further replies.