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

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

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

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    В качестве оптимизации напрашивается сделать считывание из файла построчно, т.к. файлы по 4Гб это просто необходимо сделать, чтобы не считывать весь файл в память! Т.е. while (<$FILE>) и потом работаешь со строкой.
     
  2. eLWAux

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

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    Nightmarе: Код шифровки\дешифровки на php с открытым ключём
    Тема: [Perl] Новичкам: задаем вопросы
    м?
     
  3. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    Nightmarе
    пробелы только сотри форумные

    Code:
    #/usr/bin/perl -w
    use Mcrypt qw(:ALGORITHMS :MODES);
    use MIME::Base64;
    
    $key = "E4HD9h4DhS23DYfhHemkS3Nf";# 24 bit Key
    $iv = "fYfhHeDm";# 8 bit IV
    $input = "Text to encrypt";# text to encrypt
    $bit_check=8;# bit amount for diff algor.
    
    $str= encrypt($input,$key,$iv,$bit_check);
    print "Start: $input - Excrypted: $str - Decrypted: ".decrypt($str,$key,$iv,$bit_check);
    
    sub encrypt( $$$$ ) {
    my ($text,$key,$iv,$bit_check) = @_;
    my @text_num = str_split($text,$bit_check);
    $text_num = $bit_check-length($text_num[scalar($text_num)-1]);
    for(my $i=0;$i<$text_num; $i++) { $text = $text . chr($text_num);}
    my $cipher = Mcrypt::mcrypt_load(Mcrypt::3DES,'',Mcrypt::CBC,'');
    Mcrypt::mcrypt_init($cipher, $key, $iv);
    my $decrypted = Mcrypt::mcrypt_encrypt($cipher,$text);
    Mcrypt::mcrypt_end($cipher);
    return encode_base64($decrypted,'');
    }
    
    sub decrypt( $$$$ ) {
    my ($encrypted_text,$key,$iv,$bit_check) = @_;
    my $cipher = Mcrypt::mcrypt_load(Mcrypt::3DES,'',Mcrypt::CBC,'');
    Mcrypt::mcrypt_init($cipher, $key, $iv);
    my $decrypted = Mcrypt::mcrypt_decrypt($cipher,decode_base64($encrypted_text));
    Mcrypt::mcrypt_end($cipher);
    my $last_char=substr($decrypted,-1);
    for(my $i=0;$i<$bit_check-1; $i++){
        if($i==ord($last_char)){
            
            
            
            $decrypted=substr($decrypted,0,length($decrypted)-$i);
            last;
        }
    }
    return $decrypted;
    }
    
    sub str_split( $$ ) {
        my ($text,$split) = @_;
        if($split<1) { $split = 1; }
        my @array = ();
    
        for (my $i = 0; $i < length($text); $i += $split) {
            push @array, substr($text, $i, $split);
        }
    
        return @array;
    }
     
    #943 [dei], 23 Feb 2009
    Last edited: 23 Feb 2009
    1 person likes this.
  4. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    [dei]
    Проверял идентичность результата работы?
     
    _________________________
  5. [dei]

    [dei] Active Member

    Joined:
    24 Nov 2008
    Messages:
    171
    Likes Received:
    112
    Reputations:
    5
    Kaimi
    идентично
     
  6. roddik

    roddik Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    13
    Reputations:
    0
    вот рабочий код. механайз рулз

    Code:
    use strict;
    use WWW::Mechanize;
    
    my $mech = WWW::Mechanize->new();
    $mech->agent_alias('Windows IE 6');
    
    $mech->get('https://www.google.com/accounts/ServiceLoginAuth?service=mail');
    $mech->submit_form(form_number => 1, fields => {Email => 'логин', Passwd => 'пасс', PersistentCookie => 'yes'});
    
    my ($loc) = $mech->content() =~ /location\.replace\("(.+)"\)/;
    
    $mech->get($loc);
    
    print $mech->content();
    твой код не смотрел почему не работает, но в любом случае ты неправильно куки сохраняешь, почитай доки по этому поводу

    Code:
    my $jar = HTTP::Cookies->new(file => "cookie.txt", autosave => 1, ignore_discard => 1, hide_cookie2 => 1);
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Дай пример рабочего кода получающего содержимое страницы почты в гмейле
     
    _________________________
    1 person likes this.
  8. roddik

    roddik Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    13
    Reputations:
    0
    Может лучше ее по попу скачать?
     
  9. S0ulVortex

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

    Joined:
    18 Nov 2007
    Messages:
    161
    Likes Received:
    85
    Reputations:
    10
    Вобщем решил попробывать изучить perl
    В учебнике есть задания по проделанным урокам вот запнулся на 1 из них.
    Code:
    #!/usr/bin/perl -w
    
    $im_thinking_of=int(rand 10);
    print "Введите часло от 0 до 9:";
    $guess=<STDIN>;
    chomp $guess;
    	
    	if ($guess>$im_thinking_of) {
    		print "perebor!\п";
    } elsif ($guess < $im_thinking_of) {
    	print "NEDABOR!\п";
    } else {
    	print "You win";
    }
    
    нужно кароче сделать чтобы цикл повторялся пока не будет правильного ответа. все из тыркал че-то не догоню как :)


    Code:
    #!/usr/bin/perl -w
    
    $im_thinking_of=int(rand 10);
    print "Введите часло от 0 до 9:";
    $guess=<STDIN>;
    chomp $guess;
    
    while ($guess) {
    	if ($guess>$im_thinking_of) {
    		print "perebor!\п";
    } elsif ($guess < $im_thinking_of) {
    	print "NEDABOR!\п";
    } else {
    	print "You win"; }
    }
    
    че-то такое пробую писать но он кароче повторяет ответ до бесконечности. Еси можно ещё поеснить немного. Сразу говарю учеюник скачал 3 часа назад где-то так что нуб полный. Пока несовсем понимаю что я делаю.
     
    #949 S0ulVortex, 2 Mar 2009
    Last edited: 2 Mar 2009
  10. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    S0ulVortex, тебе просто надо сделать выход, в случае, если ответ правильный. Это можно сделать несколькими способами:
    1) поставить exit если ответ правильный
    2) поставить next если ответ правильный
    3) в условие цикла добавить проверки правильного ответа
     
    1 person likes this.
  11. S0ulVortex

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

    Joined:
    18 Nov 2007
    Messages:
    161
    Likes Received:
    85
    Reputations:
    10
    Че-то я не втыкну вроде все делаю правильно а он не повторяет.
    Code:
    #!/usr/bin/perl -w
    
    $im_thinking_of=int(rand 10);
    print "Введите часло от 0 до 9:";
    $guess=<STDIN>;
    chomp $guess;
    for ($guess==$im_thinking_of) {
    	if ($guess>$im_thinking_of) {
    		print "perebor!\п";
    } elsif ($guess < $im_thinking_of) {
    	print "NEDABOR!\п";
    } else {
    	print "You win."; }
    	exit;
    }
     
  12. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    Он делает так, как ты ему говоришь! :) exit должен быть в последнем else!
    Вообще, от себя, посоветую использовать следующий стиль форматирования кода (ну или посчитать perlstyle и следовать тем советам!):
    Code:
    #!/usr/bin/perl -w
    
    $im_thinking_of=int(rand 10);
    print "Введите часло от 0 до 9:";
    $guess=<STDIN>;
    chomp $guess;
    for ($guess==$im_thinking_of) 
    {
    	if ($guess>$im_thinking_of)
           {
    	     print "perebor!\п";
            }
           elsif ($guess < $im_thinking_of)
           {
    	     print "NEDABOR!\п";
           }
           else
           {
    	     print "You win."; 
           }
    	exit;
    }
    Это позволить избегать таких ошибок!
    Код должен выглядеть так:
    Code:
    #!/usr/bin/perl -w
    
    $im_thinking_of=int(rand 10);
    print "Введите часло от 0 до 9:";
    $guess=<STDIN>;
    chomp $guess;
    for ($guess==$im_thinking_of) 
    {
    	if ($guess>$im_thinking_of)
           {
    	    print "perebor!\п";
            }
           elsif ($guess < $im_thinking_of)
           {
    	     print "NEDABOR!\п";
           }
           else
           {
    	     print "You win."; 
                 exit;
           }
    	
    }
    Разницу видишь? :)
     
    #952 demond, 2 Mar 2009
    Last edited: 2 Mar 2009
  13. S0ulVortex

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

    Joined:
    18 Nov 2007
    Messages:
    161
    Likes Received:
    85
    Reputations:
    10
    там написано так:Модифицируйте программу чтобы игра продолжалася, пока число не будет угадано.
    Че то либо я не то делаю либо я не знаю.
    [​IMG]
    мне каждый раз нужно заново запускать. А нужно чтобы он работал пока я не угадаю.
     
  14. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Code:
    $dig=int(rand 10);
    print "Введите число от 0 до 9:";
    while(<>) {
     chomp;
     last if $_ == $dig ? print "You win." : ();
     print $_ > $dig ? "perebor!\n" : "NEDABOR!\n";
    }
    
     
    _________________________
    3 people like this.
  15. S0ulVortex

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

    Joined:
    18 Nov 2007
    Messages:
    161
    Likes Received:
    85
    Reputations:
    10
    супер спс
     
  16. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    Code:
    #!/usr/bin/perl -n
    BEGIN { print"---put ENTER for start---";  $dig = int(rand 10); };
    print "put number [0 .. 9]:";
    $_ = <>;
    chomp;
    last if $_ == $dig ? print "You winner." : ();
    print $_ > $dig ? "what is more!\n" : "WHAT IS LESS\n";
    без явного объявления цикла. :)
     
  17. GAVVVR

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

    Joined:
    8 Apr 2008
    Messages:
    60
    Likes Received:
    0
    Reputations:
    0
    Написал вроде скрипт как скрипт, а выдает при запуске:
    При этом пропускает какие либо действия связанные с LWP.
     
  18. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    GAVVVR, и в чем вопрос? Если хочешь, чтобы тебе помогли, показывай, что ты там написал!
     
  19. nigger

    nigger New Member

    Joined:
    5 Jan 2009
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Какой самый лучщий язык программирования? и еще можете дать ссылку на книжки программирования на PHP?
     
  20. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    Самый лучший язык программирования PERL!!!!!!!!!!!!!
    Ссылок на книжки про PHP не даем!
     
Thread Status:
Not open for further replies.