В качестве оптимизации напрашивается сделать считывание из файла построчно, т.к. файлы по 4Гб это просто необходимо сделать, чтобы не считывать весь файл в память! Т.е. while (<$FILE>) и потом работаешь со строкой.
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; }
вот рабочий код. механайз рулз 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);
Вобщем решил попробывать изучить 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 часа назад где-то так что нуб полный. Пока несовсем понимаю что я делаю.
S0ulVortex, тебе просто надо сделать выход, в случае, если ответ правильный. Это можно сделать несколькими способами: 1) поставить exit если ответ правильный 2) поставить next если ответ правильный 3) в условие цикла добавить проверки правильного ответа
Че-то я не втыкну вроде все делаю правильно а он не повторяет. 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; }
Он делает так, как ты ему говоришь! 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; } } Разницу видишь?
там написано так:Модифицируйте программу чтобы игра продолжалася, пока число не будет угадано. Че то либо я не то делаю либо я не знаю. мне каждый раз нужно заново запускать. А нужно чтобы он работал пока я не угадаю.
Code: $dig=int(rand 10); print "Введите число от 0 до 9:"; while(<>) { chomp; last if $_ == $dig ? print "You win." : (); print $_ > $dig ? "perebor!\n" : "NEDABOR!\n"; }
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"; без явного объявления цикла.
Написал вроде скрипт как скрипт, а выдает при запуске: При этом пропускает какие либо действия связанные с LWP.
Какой самый лучщий язык программирования? и еще можете дать ссылку на книжки программирования на PHP?