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

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Kaimi, 7 May 2015.

  1. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    _________________________
  2. SekirBoshka

    SekirBoshka Member

    Joined:
    25 May 2012
    Messages:
    78
    Likes Received:
    28
    Reputations:
    0
    Не получается вывести картинку на сервере скриптом *.cdi
    Вот примерный KOD:
    #!/usr/bin/perl -w T
    use CGI::Carp qw (fatalsToBrowser);
    use strict ;
    use CGI qw( :all) ;


    print "Content-Type: image/jpeg\n\n";
    my($imagedir, $day, @jpegs, $error) ;
    $imagedir="/images/picday/";
    $error="/images/error.jpg";

    sub display_image {
    my ($image) = @_;
    open(IMAGE, "$image") || exit;
    binmode STDOUT;binmode IMAGE;
    print<IMAGE>;
    close(IMAGE);
    exit;
    }

    # Дни месяца, 1-28, 29, 30 или 31 $day=(localtime)[3];
    $day=$day-1; # Мы хотим использовать дни 0-27, и т.д...
    opendir(IMGDIR, $imagedir) || display_image($error);
    @jpegs=sort grep(/\.jpg$/, readdir IMGDIR);
    closedir(IMGDIR);

    my $image = "$imagedir/$jpegs[$day]";
    $image=$error if (not defined $jpegs[$day]);##если не нашли папку основную c картинками ##выводим картинку с ошибкой

    display_image($image);


    .....но вылетает такая ошибка <<Изображение http://******.ru/cgi-bin/dayimage.cgi не может быть показано так как содержит ошибки >>

    где ошибка понять не могу???
     
  3. J.Z.

    J.Z. Member

    Joined:
    15 Dec 2012
    Messages:
    43
    Likes Received:
    8
    Reputations:
    0
    Кто может накодить простенький парсер на perl?
    На форуме не нашел ничего похожего.

    Суть задачи следующая:

    Имеем множество файлов 1.txt, 2.txt, 3.txt и т.д.

    В файлах содержится много мусора и строки такого формата:
    Code:
    id=3424&Password=1231243&Email=[email protected]
    Нам нужно запарсить из файлов поле Password= и все содержимое в ней до поля Email= в новый файл result.txt

    Заранее благодарен :)
     
  4. Dench

    Dench New Member

    Joined:
    2 Jun 2015
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    open OUT, ">result.txt";
    open IN 'file.txt';
    while (<IN>){
    my ($f1,$f2,$f3) = split(/&/, $_);
    my (undef, $pass) = spliy (/=/, $f2);
    print OUT $pass;
    }
    close OUT
    close IN


    как то так
     
  5. J.Z.

    J.Z. Member

    Joined:
    15 Dec 2012
    Messages:
    43
    Likes Received:
    8
    Reputations:
    0
    Missing comma after first argument to open function at C:\1\parser.pl line 4, ne
    ar "'file.txt';"
    syntax error at C:\1\parser.pl line 11, near "OUT
    close"
    Execution of C:\1\parser.pl aborted due to compilation errors.
     
  6. SekirBoshka

    SekirBoshka Member

    Joined:
    25 May 2012
    Messages:
    78
    Likes Received:
    28
    Reputations:
    0
    Да он тебе по быстренькому код накидал и не проверил..код надо немного подредактировать я его проверил он выводит в файл строкой типа 123124312312431231243123124312312431231243 а тебе я так понял надо
    Password=1231243
    Password=1231243
    Password=1231243

    Вот код дровяной не оптимизирован но работает..
    #l/usr/bin/perl -w
    use strict;
    my $coint = 0;
    my ($result,$indexend,$passlenght,$file,$indexend2,$index2,$index);
    my @str2;
    print "Enter name file: "; # файл лежит в этой директории
    $file = <STDIN>;chomp $file;
    open(FILE, $file) || die "Ошибка при открытии файла $file: $!";
    my @str = <FILE>;
    close FILE;
    foreach(@str) {
    $index = index($_, "=");
    $index2 = index($_, "=", $index+1);
    $indexend = index($_, "&");
    $indexend2 = index($_, "&", $indexend+1);
    $passlenght = $indexend2 - $index2;
    $result= "\nPassword";
    $result.=substr($_, $index2, $passlenght);
    @str2 [$coint] = $result;
    $result = " ";
    $coint++;
    }
    open(FILE, ">>result.txt") || die "Ошибка при открытии файла result.txt: $!";
    print FILE @str2;
    close FILE;
     
    #6 SekirBoshka, 27 Oct 2015
    Last edited: 27 Oct 2015
    J.Z. likes this.
  7. J.Z.

    J.Z. Member

    Joined:
    15 Dec 2012
    Messages:
    43
    Likes Received:
    8
    Reputations:
    0
    Спасибо, ну вот чего я не могу понять:
    имеем файл 123.txt
    в нем идет строка:
    Login=123&Password=123&valera=353353&Password=3403035&seleochka=2323

    вытягивается только первый Password=123 в файл result и перл закрывается, как сделать, так, что бы парсило нужный текст по нужному ключю "password=" ?
     
  8. SekirBoshka

    SekirBoshka Member

    Joined:
    25 May 2012
    Messages:
    78
    Likes Received:
    28
    Reputations:
    0
    Вот этот попробуй, выводит в файл строки типа :
    Password=123
    Password=3403035
    Password=124
    Password=3403036
    ---------------------------------------------------------
    #!/usr/bin/perl -w
    use strict;
    print "Enter name file: "; # файл лежит в этой директории
    my $file = <STDIN>;chomp $file;
    open IN ,$file;
    my @elem1= <IN>;
    close IN;
    open OUT, ">>result.txt";
    my @elm2;
    my $count = 0;
    foreach(@elem1) {
    my($f1,$f2,$f3,$f4,$f5) = split(/&/,$_);
    @elm2[$count] = "$f2\n";
    $count++;
    @elm2[$count] = "$f4\n";
    $count++;
    }
    print OUT @elm2;
    close OUT;
    --------------------------------------------------------------
     
  9. Fepsis

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

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    SekirBoshka, кажется кто-то прогулял урок, на котором рассказывали про регулярные вырадения ;)
     
    t0ma5 likes this.
  10. SekirBoshka

    SekirBoshka Member

    Joined:
    25 May 2012
    Messages:
    78
    Likes Received:
    28
    Reputations:
    0
    Я только учусь:)
     
    Fepsis likes this.
  11. Dench

    Dench New Member

    Joined:
    2 Jun 2015
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Ну да, накидал по быстрому, и побег:)
    Даже не подумал, что человечек и не помыслит немного поработать над скриптом.
     
  12. J.Z.

    J.Z. Member

    Joined:
    15 Dec 2012
    Messages:
    43
    Likes Received:
    8
    Reputations:
    0
    Спасибо, работает, ну прийдется доковыривать :)

    файлик с подобным текстом:
    Code:
    Login=123&Password=123&valera=353353&Password=3403035&seleochka=2323&doda=2222
    sdigdismgidsmgids disgmidsmg dosgm disgm sidsmg dismgids
    dspigmdsgos dsigm diosg
    Password=444&sdogkdoskgos=3&kdfdfomod=33434&dlfgsdfg=390ik&password=495i496
    
    не получается запарсить :)
    Про регулярные выражения верно :)
     
  13. J.Z.

    J.Z. Member

    Joined:
    15 Dec 2012
    Messages:
    43
    Likes Received:
    8
    Reputations:
    0
    решил свой вопрос без помощи perl и гораздо проще
    Code:
    grep -E 'password=' source.txt > result.txt
    вывод строк содержащих нужный мне ключ, а дальше уже дело за малым.
    Спасибо SekirBoshka за то, что откликнулся!
     
    Dench likes this.
  14. Dench

    Dench New Member

    Joined:
    2 Jun 2015
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Все гениальное - просто :)
     
  15. alim777

    alim777 New Member

    Joined:
    12 Nov 2015
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Друзья подскажите пожалуйста нужно на странице искать email
    Не как не могу разобраться с регуляркой, подскажите пожалуйста

    Code:
    #! /usr/bin/perl
        use warnings;
        use LWP 5.64;
        use HTTP::Cookies;
    
    
        #Авторизация
        $browser=LWP::UserAgent->new;
        $browser->cookie_jar( HTTP::Cookies->new);
    
        #заход на сайт
        $response=$browser->get('http://www.test.ru');
        $response=$response->as_string;
       
        #Парсинг странички и запись в файл balance.txt
       
        @balance=$response=grep{s/(.*) ([\w+\-\.]+\@[\w\-\.]+\.\w{2,3})(.*)/$2/ig};
        print @balance;
     
  16. fobia_smog

    fobia_smog New Member

    Joined:
    31 May 2010
    Messages:
    11
    Likes Received:
    0
    Reputations:
    0
    /(.*) ([\w+\-\.]+\@[\w\-\.]+\.\w{2,3})(.*)/$2/

    это blabla [email protected] blabla
    заменит на [email protected]

    кривоватая регэкспа на выдёргивание мыльника из контекста

    хреново например это \@[\w\-\.]+ не видел мыл вида [email protected]
     
  17. demafly76

    demafly76 New Member

    Joined:
    14 Aug 2016
    Messages:
    17
    Likes Received:
    2
    Reputations:
    0
    вопрос, как на perl реализовать скрипт кодирования строки в hex?

    все разобрался!)))

    PHP:
    #!/usr/bin/perl;
    use String::HexConvert ':all';
    if(
    $ARGV[0])
    {
      
    my $hex=$ARGV[0];
      
    chomp $hex;
      
    my $result=ascii_to_hex($hex);
      print 
    '0x'."$result\n";
    }
     
    #17 demafly76, 14 Aug 2016
    Last edited: 18 Aug 2016
  18. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    1. Получить (псевдо)случайное целое число в диапазоне 0-1048575 (включительно)
    2. Преобразовать полученное десятичное число в двоичную символьную строку, без отбрасывания незначащих 0 старших разрядов.

    P.S. На php всё делается элементарно и результат ожидаемо верный, на perl же сходу я получаю не то что мне нужно, я так понимаю что есть ньюансы о которых мне приходится только догадываться.
     
  19. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Code:
    my $n = rand(1048575 + 1);
    print unpack('B*', pack('N', $n));
    
     
    _________________________
  20. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,804
    Likes Received:
    1,960
    Reputations:
    594
    Результат видел?
    У меня вот что:
    Code:
    00000000000000101001000100100000
    00000000000011100111100000000000
    00000000000011000110010011000000
    00000000000010010100100000100000
    00000000000000111111011111000000
    00000000000001111101100101000000
    00000000000000000110100110100000
    00000000000000100000011100100000
    00000000000010110111100011100000
    00000000000010111010001100000000
    00000000000001111000110011100000
    00000000000000001110010001100000
    00000000000011101011010000000000
    00000000000011001000000100100000
    00000000000001110010110010100000
    00000000000001011001111101100000
    00000000000001101101110010100000
    00000000000011011000001010100000
    00000000000000100001110110100000
    00000000000010111011001111100000
    00000000000011011001000101000000
    00000000000001011001011001100000
    00000000000000000011010110000000
    00000000000011011011101011000000
    00000000000001001011100110000000
    00000000000000011110111101000000
    00000000000010010001110110000000
    00000000000011101111001000000000
    00000000000010111110110011100000
    00000000000011111101000011100000
    00000000000010001110110100100000
    00000000000001110110111000000000
    00000000000011011110000101000000
    00000000000011100100010000000000
    00000000000011010000110000000000
    00000000000001110111000011100000
    00000000000010000110000100000000
    00000000000000000011001011000000
    00000000000011111101110101000000
    00000000000011100110110001100000
    00000000000010010100101000000000
    00000000000011110110111000000000
    00000000000000011011000100000000
    00000000000010100010100100000000
    00000000000000110001001111100000
    00000000000010010001100010100000
    00000000000001010111111111100000
    00000000000010101001011110100000
    00000000000000110101111010000000
    00000000000000111111110101000000
    00000000000011111110110011000000
    00000000000011101100100101000000
    00000000000011100000100010100000
    00000000000010010100100111000000
    00000000000011110000111110100000
    00000000000001111001000000100000
    00000000000001110100111000000000
    00000000000000000011010000100000
    00000000000010011000100000000000
    00000000000001000100011101100000
    00000000000011110110111010000000
    00000000000001010000011110000000
    00000000000010110101011110000000
    00000000000001100100010010000000
    00000000000010100101110000100000
    00000000000011000001011110100000
    00000000000011110000010001000000
    00000000000011110110111101000000
    00000000000001011111000110100000
    00000000000010010001111000100000
    00000000000010011000001101000000
    00000000000010001000001000100000
    00000000000010010011000100100000
    00000000000010110111111100000000
    00000000000001110110101100100000
    00000000000000110111001101100000
    00000000000011110000101001100000
    00000000000001111111010001100000
    00000000000000011110111011000000
    00000000000001101000010011000000
    00000000000001110010100110100000
    00000000000000000010010000100000
    00000000000010100001111100100000
    00000000000001000111110011000000
    00000000000011110100110111000000
    00000000000000001001101101100000
    00000000000000001111011011000000
    00000000000011101000011010100000
    00000000000011111010011100000000
    00000000000001011011001110000000
    00000000000010101010101100100000
    00000000000001000011101100000000
    00000000000011001011110101000000
    00000000000011111101111010100000
    00000000000000111100100000100000
    00000000000011100101000010000000
    00000000000010010101111011000000
    00000000000001111101110000000000
    00000000000001101001001001000000
    00000000000010000111010000000000
    00000000000010110001011010100000
    00000000000010110101010001100000
    00000000000001110011000010100000
    00000000000001101100100110100000
    00000000000010111010101101000000
    00000000000000100101111011100000
    00000000000001010010000001100000
    00000000000010111001010010000000
    00000000000010100010010010100000
    00000000000001100110110101000000
    00000000000010000110111001100000
    00000000000010011000011111000000
    00000000000001011101101100100000
    00000000000010110010000001000000
    00000000000010010011101000000000
    00000000000001110011111101000000
    00000000000001100000110111100000
    00000000000000011000010001100000
    00000000000001111111111111000000
    00000000000000000101111101000000
    00000000000010001000000110000000
    00000000000001100011011001000000
    00000000000001010010101111000000
    00000000000010001101110111100000
    00000000000010011010011000100000
    00000000000000101110111101100000
    00000000000011100111010000000000
    00000000000011101111001011100000
    00000000000000001100011000100000
    00000000000000111111101000000000
    00000000000000000111101100000000
    00000000000000000011000010000000
    00000000000000101011110100100000
    00000000000010100000111001100000
    00000000000000110011101010000000
    00000000000011100100001111000000
    00000000000001011011010101100000
    00000000000010010001011011100000
    00000000000011111011010110100000
    00000000000001111101110101100000
    00000000000010000110111101100000
    00000000000011000101110000100000
    00000000000001010111001110100000
    00000000000000100100000111000000
    00000000000001111000111111000000
    00000000000000001001101010000000
    00000000000011100100001000000000
    00000000000010000000000111000000
    00000000000000110111010111100000
    00000000000011000111110111000000
    00000000000001101011111111000000
    00000000000010010101101100100000
    00000000000000010001101010000000
    00000000000010000000010110100000
    00000000000010100010111011100000
    00000000000000101100000100100000
    00000000000010000111011000100000
    00000000000010110101001011000000
    00000000000010000001000000000000
    00000000000001100000110010100000
    00000000000010101110111101100000
    00000000000001010101101011100000
    00000000000000100000001110100000
    00000000000010101101010101100000
    00000000000001000101000111100000
    00000000000000110000010101100000
    00000000000010000111010111100000
    00000000000000100111000110100000
    00000000000000001100110010000000
    00000000000001110010111111000000
    00000000000001001001000000000000
    00000000000001000001111100100000
    00000000000010100111011111000000
    00000000000011000001101001000000
    00000000000001011111001110100000
    00000000000011011101001110100000
    00000000000010001110010010100000
    00000000000011101011110000100000
    00000000000000101011110010000000
    00000000000011100011010101100000
    00000000000001010011001011000000
    00000000000011001000000001100000
    00000000000000000100101110100000
    00000000000001000011101100100000
    00000000000011010010111100000000
    00000000000000111110101001100000
    00000000000000110101100111000000
    00000000000010001111010110100000
    00000000000001111111101000100000
    00000000000000001010000110100000
    00000000000011011101000100100000
    00000000000011111111111011100000
    00000000000001101011011101000000
    00000000000000110110011101100000
    00000000000010001111000100100000
    00000000000000110001001111100000
    00000000000000111100001000100000
    00000000000011100111001000100000
    00000000000000100011011110100000
    00000000000001010101010000000000
    00000000000010101110110110100000
    00000000000001101011001010100000
    00000000000010011001010010000000
    00000000000000101010101010100000
    00000000000011010100101011100000
    00000000000000101000000001100000
    00000000000001110110001101000000
    00000000000001111101111010000000
    00000000000010101111011011100000
    00000000000001100010110111100000
    00000000000010001010111001000000
    00000000000001111100101100000000
    00000000000001010111000110000000
    00000000000001110000010110000000
    00000000000010000011100010000000
    00000000000010100100000001100000
    00000000000001001111110000000000
    00000000000001010010110110100000
    00000000000000101101000100000000
    00000000000010010000110001100000
    00000000000000110111111110000000
    00000000000001001111010101000000
    00000000000011010110110010000000
    00000000000001111010101010000000
    00000000000001110111101100000000
    00000000000010000000100010100000
    00000000000010111000100001100000
    00000000000010100001110011100000
    00000000000000010111101010100000
    00000000000011110000110111000000
    00000000000011000101010011100000
    00000000000001110110110000100000
    00000000000001101001010111000000
    00000000000001000010100010000000
    00000000000011010010100000000000
    00000000000011000101000011100000
    00000000000010100111010110000000
    00000000000001101110011110000000
    00000000000001111011011110100000
    00000000000010101000001100100000
    00000000000000110110001101000000
    00000000000010100001100011100000
    00000000000010101001110001000000
    00000000000010010011001110100000
    00000000000010101101111100100000
    00000000000011000000010111100000
    00000000000000101001101101100000
    00000000000000110010101110100000
    00000000000001010011111010100000
    00000000000010011001100001000000
    00000000000000110011101000000000
    00000000000001110001011001100000
    00000000000000101101001011100000
    00000000000001001110011001100000
    00000000000001010001011100100000
    00000000000001100111000010000000
    00000000000001010001011101100000
    00000000000011111010011110100000
    00000000000010001000111010000000
    00000000000001111010000101100000
    00000000000010100110100010100000
    00000000000000100001000100100000
    00000000000000110010001010000000
    00000000000001111011101100000000
    00000000000010101100001000000000
    00000000000011101001101001000000
    00000000000001100010111110100000
    00000000000000000110001100000000
    00000000000010000000010011100000
    00000000000010110010100011100000
    00000000000001010110010111000000
    00000000000011100110001011000000
    00000000000011000100011100000000
    00000000000000000010011000100000
    00000000000010111000101110100000
    00000000000011010110000001000000
    00000000000010001010100010100000
    00000000000001011111101010100000
    00000000000001000000100100100000
    00000000000001010011111001000000
    00000000000011110011001110100000
    00000000000000010111001110000000
    00000000000001111011100110000000
    00000000000011011010010011000000
    00000000000010100100000101100000
    00000000000001111000111000100000
    00000000000000111000010111100000
    00000000000001000011001000000000
    00000000000010111110100110100000
    00000000000010010010110101100000
    00000000000001110100100001100000
    00000000000010011101001001100000
    00000000000001111111100011100000
    00000000000011110011010110000000
    00000000000000110111010110100000
    00000000000000111100000110000000
    00000000000000101110111100100000
    
    PHP:
    #!/usr/bin/perl
    while(true) {
    $nint(1048576*(rand))+int(rand(31));
    $nstr substr(unpack("B32"pack("N"$n)),-20);
    print 
    $nstr."\r\n";
    }
    Code:
    01001011101001010110
    10101000110011100001
    01010010011010010011
    01110101100110101101
    01111110100001011011
    11111101001100001011
    00011100000100110110
    10000100101101001100
    11110011100001100000
    01000100100001111010
    10001110100111000010
    00010100011100101101
    10000101101110001011
    01100100010101100000
    01111101110101100011
    01101001010001110000
    11111110111100001110
    11100111001101110000
    11001010110111100100
    01111111001001010011
    11011100110011111100
    11101001101111110001
    10111001000110001111
    00000110100010010100
    00110101101110010100
    00100111100011001111
    01100011001011100100
    10000001011110001000
    10111101111000011001
    00101000010011101101
    01010000000100111001
    10000000100000111110
    11101100001111001111
    10001100101100101001
    00101000000000100010
    11111111101110101001
    00111111100011010101
    01111011011100110011
    10001001011111110011
    11100011101111100001
    10100011010101101011
    00101110010011111001
    11111110010101010011
    10010110101101010010
    11110100111010010101
    10011111000100100100
    00010000100101101001
    11000101010010010110
    
    В принципе задачу я решил, но решение корявое и мне оно не нравится.
     
    #20 -=lebed=-, 24 Nov 2016
    Last edited: 24 Nov 2016