ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   PHP (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [Perl] Новичкам: задаем вопросы (https://forum.antichat.xyz/showthread.php?t=40897)

Digimortal 25.06.2007 17:24

Цитата:

Сообщение от genom--
ну если в консоль я помнится делал так -- но это жесть $xz='пример:';$xz=~tr/а-я/\x80-\x9f/;print "$xz"; - и большими буквами

а почему ж нельзя и маленькие буквы сделать? Ниче сложного тут нету:
Код:

sub cyr
{
        $phrase = shift;
        $phrase =~ y/А-яЁё/\x80-\xaf\xe0-\xf1/;
        return $phrase;
}

print cyr('АБВГДЕЁЭЮЯабвгдеёэюя');


genom-- 27.06.2007 00:59

да я как бы в курсе что можно =) просто там большими

C!klodoL 30.06.2007 20:08

как прикрутить к IO::Socket прокси?
Код:

#! usr/bin/perl

use IO::Socket;

my $server = "pop3.mail.ru";
my $port = "110";
my $socket = new IO::Socket::INET(PeerAddr => $server, PeerPort => $port, Proto => "tcp");


genom-- 01.07.2007 12:28

вот со статьи вырезал скрипт который берет проксю коннектится к неи и отправляет пакет =) юзай lwp там проккся в 1 строку

Код:

#!/usr/bin/perl
      use IO::Socket;

      # открываем файл
      open (base, "proxy.lst") || die "Error! Can't open proxy list\n";
      while ( <base> )
      { @proxy = <base>; } # считываем данные в масив

      $z=chomp(@proxy); # кол-во записей в файле
      for ($g=0; $g < $z; ){
      n:
      $g++;
      $path="http://www.fitl.biz/ru/bs/b.php?cmd=go&from=44257&said=34315";
      chomp($string = @proxy[$g]); #записываем запись в строку и убираем
      # символ перевода каретки
      @conn=split(/:/,$string); # превращаем с список строку данных
      # разделенных двоеточием
      $server = @conn[0]; # адрес прокси
      $port = @conn[1]; # порт прокси

      $socket=IO::Socket::INET->new( PeerAddr => $server, PeerPort => $port, Photo => tcp)
      or goto n;


      $i++;
      system("cls ; clear");
      print "sent : $i";

      print $socket "GET $path HTTP/1.1\n";
      print $socket "Host: $server\n";
      print $socket "Accept: */*\n";
      print $socket "Http-Referer: http://www.rushteam.h1.ru/index.htm\n";
      print $socket "User-Agent: Internet Explorer 6.0\n";
      print $socket "Pragma: no-cache\n";
      print $socket "Cache-Control: no-cache\n";
      print $socket "Connection: close\n\n";
      }


C!klodoL 01.07.2007 19:49

LWP это по http get и post запросы, мне надо tcp - соединение, как обычный сокет, только через прокси, накидайте пожалуйсто примерчек, а то в гугле онли http через проксю

genom-- 01.07.2007 19:57

вот те дока по lwp и io --- может поймешь глупость посл вопроса пример оттуда

http://slil.ru/24578629

KSURi 01.07.2007 22:57

perldoc IO::Socket::Socks

Bars_TT 12.07.2007 00:32

посоветуйте, грамотную литературку с примерами и т.д. Для изучения перла (как локального приложения)

Ni0x 12.07.2007 00:53

Bars_TT, книжек много, но не могу не посоветовать Perl Cookebook, неплохо для новичков.

C!klodoL 12.07.2007 01:13

Освой Самостоятельно Perl за 24 часа.pdf эта книжка неплохая имхо, по крайней мере мне нравится

Ni0x 12.07.2007 01:31

Цитата:

Освой Самостоятельно Perl за 24 часа.pdf эта книжка неплохая имхо, по крайней мере мне нравится
само название книги говорит за себя... невозможно выучить язык такого уровня за 24 часа, синтаксис - да, язык - нет.

KSURi 12.07.2007 01:36

имхо это гавно...

Digimortal 12.07.2007 15:03

единственная книга по перлу, которая мне пригодилась при изучении этого языка - "Перл: специальный справочник. Холзнер С.". ее можно легко найти в pdf-формате..

cylaaaan 12.07.2007 18:51

Такая проблема...
решил сделать Icq бот на Perl'е

посмотрел рунет, нашел сорс скрипта...
http://www.security-teams.net/board/index.php?showtopic=4435
и возник такой вопрос в обработке входящих данных с другого номера icq:

PHP код:

sub message_callback {
 
local($cmd$params$result);
 
local $result "";
 
local($client$uin$msg) = @_;

 if((
$cmd$params) = $msg =~ /^\!([^\ ]+) (.+)$/)
 {
   
$result exists($functions{$cmd}) ? $functions{$cmd}($params) : "";
   
$client->send_im($uin$result) if $result;
 }


В этом скрипте у меня два параметра, тоесть, боту вводишь например !weather Москва,
Но мне нужно что бы вводилось три и более параметров...

Основная проблема у меня в
PHP код:

 if(($cmd$params) = $msg =~ /^\!(+) (.+)$/) 

Так как я только начинаю в программировании, еще плохо разбираюсь, получилось примерно такое:


PHP код:

   if(($cmd$params1$params2) = $msg =~ /^\!([^\ ]+) (.+) (.+)$/)
 {
   
$result exists($functions{$cmd}) ? $functions{$cmd}($params1) : $functions{$cmd}($params2);
   
$client->send_im($uin$result) if $resultsleep(10);
   } 

Помогите плз сделать третий и более параметр (пример: !weather Россия Москва)

Digimortal 12.07.2007 20:01

cylaaaan,
по-моему проще всего использовать следующий алгоритм:
1 получить строку, где будет комманда и ее параметры.. ( $string )
2 разбить ее split'ом на отдельные слова и занести их в массив.. ( @params = split " ", $string;
3 вытащить (shift'ом) нулевой элемент массива - в нем будет указана комманда.. ( $cmd = shift @params; )
4 распознать комманду и передать массив с параметрами на нужный саб.. ( ну тут идет цепочка if - elsif - else , где мы вызываем соответствующий комманде саб, передавая массив @params в качестве параметров )

cylaaaan 12.07.2007 20:42

спасибо, но я уже сам додумал скрипт ))

slider 13.07.2007 00:05

Как совместить Tk и Threads ?

KSURi 13.07.2007 02:19

Код:

use Tk;
use threads;

;)

null_access 13.07.2007 07:15

подскажите плз, как из консоли пересобрать перл с поддержкой threads?
#perl -V выдаёт следующее:
Код:

Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
  Platform:
    osname=linux, osvers=2.6.12-12mdksmp, archname=i386-linux
    uname='linux n4.mandriva.com 2.6.12-12mdksmp #1 smp fri sep 9 17:43:23 cest 2005 i686 intel(r) xeon(tm) cpu 2.80ghz gnulinux '
    config_args='-des -Dinc_version_list=5.8.7 5.8.7/i386-linux 5.8.6 5.8.6/i386-linux 5.8.5 5.8.4 5.8.3 5.8.2 5.8.1 5.8.0 5.6.1 5.6.0 -Darchname=i386-linux -Dcc=gcc -Doptimize=-O2  -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fomit-frame-pointer -march=i586 -mtune=pentiumpro -fasynchronous-unwind-tables -Dprefix=/usr -Dvendorprefix=/usr -Dsiteprefix=/usr -Dsitebin=/usr/local/bin -Dsiteman1dir=/usr/local/share/man/man1 -Dsiteman3dir=/usr/local/share/man/man3 -Dman3ext=3pm -Dcf_by=Mandriva -Dmyhostname=localhost -Dperladmin=root@localhost -Dcf_email=root@localhost -Dd_dosuid -Ud_csh -Duseshrplib'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=define usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
    optimize='-O2 -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fomit-frame-pointer -march=i586 -mtune=pentiumpro -fasynchronous-unwind-tables',
    cppflags='-fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -I/usr/include/gdbm'
    ccversion='', gccversion='4.1.1 20060724 (prerelease) (4.1.1-3mdk)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -lndbm -lgdbm -ldl -lm -lcrypt -lutil -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lc
    libc=/lib/libc-2.4.so, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.4'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i386-linux/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
  Compile-time options: PERL_MALLOC_WRAP USE_LARGE_FILES USE_PERLIO
  Locally applied patches:
        Mandriva Linux patches
  Built under linux
  Compiled at Sep  8 2006 20:02:03
  @INC:
    /usr/lib/perl5/5.8.8/i386-linux
    /usr/lib/perl5/5.8.8
    /usr/lib/perl5/site_perl/5.8.8/i386-linux
    /usr/lib/perl5/site_perl/5.8.8
    /usr/lib/perl5/site_perl
    /usr/lib/perl5/vendor_perl/5.8.8/i386-linux
    /usr/lib/perl5/vendor_perl/5.8.8
    /usr/lib/perl5/vendor_perl/5.8.7
    /usr/lib/perl5/vendor_perl/5.8.7/i386-linux
    /usr/lib/perl5/vendor_perl/5.8.6
    /usr/lib/perl5/vendor_perl/5.8.5
    /usr/lib/perl5/vendor_perl
    .


slider 13.07.2007 10:46

Цитата:

Сообщение от KSURi
Код:

use Tk;
use threads;

;)

да Ксурент .. ))) я серьёзно... при использовании их
прут ерроренги.. =\

KSURi 13.07.2007 12:08

null_access
перед сборкой делай
Код:

./configure -Dusethreads
А потом уже стандартное
Код:

make && make test && make install

null_access 13.07.2007 14:00

а как разобрать перл который сейчас собран? чтобы начать эту сборку :confused: я так понял что это мне нужно его заново в дистрибутивах скачать? или как то можно то что уже собрано поправить и пересобрать? вообще не представляю где нужно находиться в какой директории. :rolleyes:

alextoun 14.07.2007 00:47

[QUOTE]#/usr/bin/perl -w $write = 24
$two =3
$rez = $write * $two[QUOTE]
вот сижу уже минут 20 читаю, нравится, вот ошибка вылетает. блин

genom-- 14.07.2007 00:56

C:\>perl -e "$write=24; $two=2;$rez=$two * $write; print $rez;"
48

вот както так -- точки с запятой не забывай

KSURi 14.07.2007 01:41

Цитата:

Сообщение от alextoun
Цитата:

#/usr/bin/perl -w $write = 24
$two =3
$rez = $write * $two
вот сижу уже минут 20 читаю, нравится, вот ошибка вылетает. блин

ахуеть чувак, с таким же успехом ты можешь код на питоне совать в интерпретатор пхп

ЗЫ: http://translate.google.com/

KSURi 14.07.2007 18:42

Код:

my $res = `cmd args`
В $res окажется, то, что должно было вывестись в STDOUT.

alextoun 14.07.2007 19:11

Цитата:

#!/bin/usr/perl
print "Vashe imya?\n"; #Imya vvesti
$name=<STDIN>; # vvod imeni
$~=NAME_FORMAT; #format vvod
write; #vivod privetstviya
$~=name_format_bottom; #vivod nigney stroki
write;
format Name_format=
Privet, @>>>>>>!
$name

.
format name_format_top=
=============================
Soobshenie Perl-progi
.
format NAME_FORMAT_TOP=
=======================
.
ошибку пишет NAme_format

C!klodoL 14.07.2007 19:24

помогите с регулярными выражениями, пишу авторегер акков для одного сайта, он в странице нам выдает коды безопасности вот такие:
Код:

  <input type="hidden" name="code" id="code" value="ca2af9b616333f9cb3ab3d90e2597e73">
 <input type="hidden" name="mu" id="mu" value="1776749550">

нужно выдрать ca2af9b616333f9cb3ab3d90e2597e73 и 1776749550 и присвоить их переменным

KSURi 14.07.2007 19:38

Код:

/value="([a-f0-9]{32})"/
Код:

/value="(\d+)"/

Ilia_dozor 20.07.2007 20:00

ПРИВЕТ всем..вот есть сплоит
http://www.securitylab.ru/poc/extra/298626.php
Хм...установил ActivePerl запускаю c:\sp.pl
и тут загвоздка....как правильно ввести параметры,которые он хочет.....
и кто юзал етот сплоит напишите.мне нада искать страницу типа wp-app.php
или нет..короче напишите знактооки перла че да как..заранее всем благодарен!!!!

vladest 24.07.2007 20:10

Подскажите вот такую весчь:
есть сайт-архив валлпаперов - babene.ru.

http://babene.ru/jpgs/2007/07/22/u14_4305.jpg - чисто адрес рисунка

нужен скрипт или намёк, который тянет с этого сайта картинки в этой директории

cylaaaan 28.07.2007 15:27

Подскажите, как сделать скрипт.
Нужен что то типа парсера.
Что бы из одного файла, набитого разным мусором, выгребал только 10-значные числа.
И записывал их в другой файл разделяя ";\n"
---
1234567890;
1234567890;
1234567890;
1234567890;
1234567890;
---
и удалял первые 3 цифры

---
4567890;
4567890;
4567890;
4567890;
4567890;
---

genom-- 29.07.2007 00:39

вот как то так


open ss,"<in.txt";
open yy,">out.txt";
while($a=<ss>){
while($a=~/[0-9]{10}/){$str=$&;$a=~s/$&//i;
$str=reverse $str;
for(1..3){chop $str;}
$str=reverse $str;
print yy "$str;\n";
}
}

close ss;close yy;

не оч элегантно но я хочу спать и туго ща соображаю -- входной файл in.txt выходной out.txt

KSURi 29.07.2007 00:40

Код:

open(IN, 'in.txt') || die $!;
open(OUT, '>', 'out.txt') || die $!;
while(<IN>)
{
  chomp;
  print OUT substr($1, 3) . ";\n" foreach(/(\d{10})/g)
}
close IN;
close OUT;

UPDATE:
genom-- жесть

genom-- 29.07.2007 11:49

я простой сталевар я варю жесть =) -- мда чет у меня substr из головы вылетел сидел вчера ночью бумал как бкувы срезать =)

vladest 30.07.2007 15:45

Скажите, как сделать так, что бы при обходе хэша в цикле его элементы выводились в нужном порядке.
Пример:
%hash =('1'=>'1',
'2'=>'2',
'3'=>'3');

while ( ($k, $v) = each(%hash) ){
print "$k = $v \n";
}

выводит:
1 = 1
3 = 3
2 = 2
Почему? надо что бы 1,2,3

Piflit 30.07.2007 15:49

vladest проверь то же самое от 1 до 5. вроде ошибки нет=\

KSURi 30.07.2007 16:02

Цитата:

Сообщение от vladest
Скажите, как сделать так, что бы при обходе хэша в цикле его элементы выводились в нужном порядке.
Пример:
%hash =('1'=>'1',
'2'=>'2',
'3'=>'3');

while ( ($k, $v) = each(%hash) ){
print "$k = $v \n";
}

выводит:
1 = 1
3 = 3
2 = 2
Почему? надо что бы 1,2,3

perldoc -f each
Код:

Entries are returned in an apparently random order. The actual
random order is subject to change in future versions of perl,
but it is guaranteed to be in the same order as either the
"keys" or "values" function would produce on the same
(unmodified) hash. Since Perl 5.8.1 the ordering is different
even between different runs of Perl for security reasons (see
"Algorithmic Complexity Attacks" in perlsec).

Через each ты не получишь в порядке объявления

vladest 30.07.2007 16:03

Цитата:

Сообщение от Piflit
vladest проверь то же самое от 1 до 5. вроде ошибки нет=\

4 = 4
1 = 1
3 = 3
2 = 2
5 = 5

Гг!

Digimortal 30.07.2007 16:13

Код:

%hash =('1'=>'1',
'2'=>'2',
'3'=>'3');

foreach $k (sort keys %hash){
print "$k => $hash{$k} \n";
}



Время: 13:44