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

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

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

    constanta New Member

    Joined:
    19 Sep 2007
    Messages:
    33
    Likes Received:
    2
    Reputations:
    0
    Народ , такой вопрос. ( сразу говорю что ногами не бейте сильно, сам знаю чо ботинок полный).

    Пытаюсь написать прогу, что бы она в директории искала во всех файлах определенное слово. Но чето пока не могу понять в чем проблема. Не ищет тварюка чего то.

    Code:
    open (FILE2," +> 1.txt ");
    opendir (DIR,"MY" );
    open (LIST,">> final.txt") ;
      @dir = readdir (DIR);
    
      $a= undef  ;
      for ($a= 2; $a <= $#dir ; $a++   ) {
      chomp($b=$dir[$a]);
      print FILE2 "$b\n" ;
      }
    
     while (<FILE2>) {
       $search=$_ ;
     open (SEARCH ,"<$search") ;
        while (<SEARCH>) {
         $c=$_  ;
         if ($c =~  m/User/i) {
         print LIST "$c ----- $search \n"  ;
        }
       }
      }
    
     close LIST ;
     close FILE2 ;
     close SEARCH ;
     closedir DIR ;
    
         <> ;
     
  2. Пыхпых Инъекцыч

    Joined:
    20 Jun 2007
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    экранирование спецсимволов

    Вот есть, например, такой кусок кода:
    PHP:
    my $var $ARGV[0];
    print 
    $var;
    Как при вводе экранировать спецсимволы?
    Например, при передаче $ARGV[0] строки, содержащей символ "&" вылазит ошибка "строка_до_символа & " "не является внутренней или внешней командой, исполняемой программой или пакетным файлом."
    Т.е, например, при запуске "myscript.pl http://url.com/index.php?id1=1&id2=2" символ & воспринимается как амперсанд - как превратить его в строчный символ?
     
  3. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    да никак, тут в консоли дело, попробуй взять в одинарные кавычки ссылку
     
    1 person likes this.
  4. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    а лучше в двойные.. )
     
  5. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    ммм

    Code:
    $ [COLOR=White][SIZE=1]cat t.pl[/SIZE][/COLOR]
    [COLOR=DarkOrange]#!/usr/bin/perl -w 
    use strict;
    use warnings;
    my $s = shift;
    print $s,"\n";[/COLOR]
    $ [COLOR=White][SIZE=1]perl -w t.pl http://url.com/index.php?id1=1\&id2=2[/SIZE][/COLOR]
    [COLOR=Red]http://url.com/index.php?id1=1&id2=2[/COLOR]
    
    мммм ? :D
     
  6. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    в винде так не получится... )
    а зачем 2 раза -w пишешь вдобавок к тому, что прагму warnings заюзал? )
     
    1 person likes this.
  7. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    тупанул с варнингом) решил повыпендриваться
    #пс поставил убунту :) изучаю
     
  8. gizmo

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

    Joined:
    21 Dec 2006
    Messages:
    126
    Likes Received:
    28
    Reputations:
    9
    В неком файле на серваке заданы пассы и логины через разделитель. Есть форма, где поля логин и пасс.
    проверяем введенные логин и пасс.

    для начала написал только проверку логина. ниже приведен код.

    Проблема в том, что
    Code:
    if ($arr[$m]->[$n]==$obtained_login)
    выполняется всегда, если первый символ логина - буква. Если цифра - не выполняется.

    Объясните, пожалуйста, почему так происходит.


    HTML:
    <html>
    <head>
    <title>xz</title>
    </head>
    <body>
    <form action="lab20.pl" method="post">
    LOGIN <input type="text" name="login"><p>
    БЗДЫДЫЩ: <input type="text" name="pass"><p>
    <input type="submit" value="check">
    </form>
    </body>
    </html>




    Code:
    #!/usr/bin/perl    -w
    use CGI;
    print "Content-type:text/html;charset=windows-1251\n\n";
    $q = new CGI;
    $obtained_login = $q->param('login');
    $obtained_password = $q->param('pass');
    open(DATA, "users.txt");
    $i=0;
    foreach $line(<DATA>)
    {
    	$j=0;
          @temp=split (/;/,$line);
    	while	($j<=$#temp)
    		{
    		$arr[$i]->[$j]=$temp[$j];
    		$j++;
    		}
                       	$i++;
    }
    close(DATA);
    for($m=0; $m<$i; $m++)
    {
    
     for ($n=0;$n<$j; $n++)
           {
     	if ($arr[$m]->[$n]==$obtained_login)
            {
             print "good";
            }
             else { print "bad";}
    
     }
    }
     
  9. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    я не проверял, но по моему дело в чисельном сравнении ==, попробуй строкове eq
     
    2 people like this.
  10. gizmo

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

    Joined:
    21 Dec 2006
    Messages:
    126
    Likes Received:
    28
    Reputations:
    9
    C!klodoL, ты прав, спасибо, очень оперативно!
    проблема решена, всем спасибо.
     
  11. gizmo

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

    Joined:
    21 Dec 2006
    Messages:
    126
    Likes Received:
    28
    Reputations:
    9
    а как бы его так аккуратно дописать, что б и пароль проверял?
    я дописал, но сам баг через 5 минут нашел.
     
  12. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    мне было проще переписать занова, надеюсь это то что ты имел ввиду
    Code:
    #!/usr/bin/perl -w
    use strict;
    use CGI qw(:standard);
    
    my $cgi = CGI->new();
    my $login = $cgi->param('login');
    my $pass = $cgi->param('pass');
    print $cgi->header(-charset => 'UTF-8');
    if ($login && $pass) {
    	readdata();
    } else {
    	 print $cgi->start_html('Fuck you hacker!'),
    	      $cgi->start_center,
    	      $cgi->h1('Fuck you hacker!'),
    	      $cgi->end_html;
    }
    
    sub readdata {
    	open(my $data, '<users.txt');
    	while(<$data>) {
    		if (/$login;$pass/) {
    			print $cgi->start_html('GOOD!'),
    			      $cgi->start_center,
    			      $cgi->h1('GOOD!'),
    			      $cgi->end_html;
    			close $data;
    			exit
    		}
    	}
    	print $cgi->start_html('BAD!'),
    	      $cgi->start_center,
    	      $cgi->h1('BAD!'),
    	      $cgi->end_html;
    }
    результат испытаний;
    http://localhost/cgi-bin/lol.pl?login=root&pass=432 пишет BAD;
    http://localhost/cgi-bin/lol.pl?login=root&pass=pass пишет GOOD
    если вызвать без параметров то - F*ck you hacker!
     
    1 person likes this.
  13. Zhenek

    Zhenek Banned

    Joined:
    9 Nov 2007
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Помогите..
    Я немогу установить Mail::pOP3Client
    У меня есть сама библиотека а не ссылка для ее скачки и установки.... Помогите..
     
  14. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    консоль; ppm, ppm> install Mail::pOP3Client
     
  15. Zhenek

    Zhenek Banned

    Joined:
    9 Nov 2007
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    А куда сами файлы кидать???
    там 2 папки:

    cgi-shl
    htdocs

    в каждой папка qdpop а в ней куда *.pl и др файлы.
     
  16. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    ты на хостинг чтоли модуль хочешь поставить? на хостинг может поставить только сам хостер, попробуй просто положить модуль в одной папке со скриптом его использующим, сами файлы в cgi-shl
     
  17. Zhenek

    Zhenek Banned

    Joined:
    9 Nov 2007
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    Не на локалхост хочу поставить....
    У меня активперл стоит и все.
    Могу еще денвер поставить...
     
  18. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    ыыы, у тебя скрипт для вэб? если для вэб то нужен сервер. cgi-shl, htdocs где вообще эти папки находятся?
     
  19. Zhenek

    Zhenek Banned

    Joined:
    9 Nov 2007
    Messages:
    0
    Likes Received:
    2
    Reputations:
    0
    это папки в библиотеке.
    т.е в архиве. Я скачал архив с этой библой и там были эти файлы.
     
  20. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    жесть! чтобы поставить библиотеку пишем в консоли ppm, у нас появится ppm>, пишем install Mail::pOP3Client, готово. файлы из архива модуля никуда класть не нужно.
    проверить установку можно так perl -e "use Mail::pOP3Client" если не напишет ничего в ответ то модуль успешно установлен, но зачем нам модуль если мы ни... не знаем?
     
    1 person likes this.
Thread Status:
Not open for further replies.