Старый 22.08.2010, 15:53   #11
daniel_1024
 
Аватар для daniel_1024
 
Регистрация: 07.07.2010
Сообщений: 21
Репутация: 8
По умолчанию

такая проблема:
есть текст в кодировке windows-1251, к нему не получается применить регулярные выражения, содержащие русские буквы.
перекодировал текст в utf8, но всё равно не получается.
daniel_1024 вне форума   Ответить с цитированием
Старый 04.09.2010, 00:55   #12
Delimiter
 
Регистрация: 12.08.2010
Сообщений: 47
Репутация: 4
По умолчанию

прошу не пинать ногами , мозги у мну Си-шные


Код:
     @bris=<$remote>;
            for($x=0;$x<($#bris+1);$x++)
            {
                $hui=$bris[$x];
	       $[=0;
                if(($l=index($hui,"b-offers__name",0))>1)
                {
	         if(($m=index($hui,"modelid=",$l))>$l)
                  {
		  if(($o=index($hui,">",$m))>$m)
		  {
		     if(($p=index($hui,"<",$o))>$o)
		     {
		        $model=substr($hui,$o+1,$p-$o-1);
		        $model_id=substr($hui,$m+8,$o-$m-9);
      ...........
как нибудь можно ускорить выполнение .... а то ActivePerl еле шевелится

да и код какой то дерьмовый зачем то на строки делю ... чуствую что наверняка есть поиск без деления
в @bris же все данные
Delimiter вне форума   Ответить с цитированием
Старый 04.09.2010, 15:32   #13
fury
 
Регистрация: 11.07.2010
Сообщений: 9
Репутация: 1
По умолчанию

Цитата:
Сообщение от Delimiter Посмотреть сообщение
прошу не пинать ногами , мозги у мну Си-шные
как нибудь можно ускорить выполнение .... а то ActivePerl еле шевелится

да и код какой то дерьмовый зачем то на строки делю ... чуствую что наверняка есть поиск без деления
в @bris же все данные
Код:
for (<$remote>)
{
  my ($model_id, $model) = m'b-offers__name.+?modelid=([^>]++)>[^<]++<';
}
Скорее всего перевод неточный, нет желания разбираться. Надо по-русски писать, чего вы хотите и что код делает на самом деле, если ожидания не совпадают с результатами.
fury вне форума   Ответить с цитированием
Старый 03.10.2010, 22:02   #14
vince
 
Аватар для vince
 
Регистрация: 03.10.2010
Сообщений: 29
Репутация: 0
По умолчанию

Код:
#!/usr/bin/perl

$LIMIT = shift || 5000;

$|=1;
open (STDIN,"/usr/sbin/tcpdump -lnx -s 1024 dst port 80 |");
while (<>) {
    if (/^\S/) {
	last unless $LIMIT--;
	while ($packet=~/(GET|POST|WWW-Authenticate|Authorization).+/g)  {
	    print "$client -> $host\t$&\n";
	}
	undef $client; undef $host; undef $packet;
	($client,$host) = /(\d+\.\d+\.\d+\.\d+).+ > (\d+\.\d+\.\d+\.\d+)/
	    if /P \d+:\d+\((\d+)\)/ && $1 > 0;
    }
    next unless $client && $host;
    s/\s+//;
    s/([0-9a-f]{2})\s?/chr(hex($1))/eg;
    tr/\x1F-\x7E\r\n//cd;
    $packet .= $_;
}
Начал учить perl, под руку попал исходник сниффера.. надо запускать из под рута, ./sniffer.pl > dump.. но он нихрена не хочет писать в файл дамп. читал маны что бы понять код. запускал tcpdump с теми же параметрами, в консоль выводит. еще мне интересно зачем писать $LIMIT = shift || 5000; если shift возвращает первый элемент массива, а в строчке просто выставляется максимум записей в файл? как эта строка работает на самом деле?
vince вне форума   Ответить с цитированием
Старый 09.10.2010, 12:16   #15
SHiNiGaMi
 
Аватар для SHiNiGaMi
 
Регистрация: 03.08.2010
Сообщений: 2
Репутация: 0
По умолчанию

Цитата:
Сообщение от daniel_1024 Посмотреть сообщение
такая проблема:
есть текст в кодировке windows-1251, к нему не получается применить регулярные выражения, содержащие русские буквы.
перекодировал текст в utf8, но всё равно не получается.
PHP код:
sub utf82win1251 
    
my $mess=shift
    
my %conv=''
my @utf8=('\xD0\xB0','\xD0\xB1','\xD0\xB2','\xD0\xB3','\xD0\xB4'
          
'\xD0\xB5''\xD1\x91','\xD0\xB6','\xD0\xB7','\xD0\xB8'
          
'\xD0\xB9','\xD0\xBA','\xD0\xBB','\xD0\xBC''\xD0\xBD'
          
'\xD0\xBE','\xD0\xBF','\xD1\x80','\xD1\x81','\xD1\x82'
          
'\xD1\x83','\xD1\x84''\xD1\x85','\xD1\x86','\xD1\x87'
          
'\xD1\x88','\xD1\x89','\xD1\x8A','\xD1\x8B','\xD1\x8C'
          
'\xD1\x8D','\xD1\x8E','\xD1\x8F','\xD0\x90','\xD0\x91'
          
'\xD0\x92','\xD0\x93','\xD0\x94''\xD0\x95','\xD0\x81'
          
'\xD0\x96','\xD0\x97','\xD0\x98','\xD0\x99','\xD0\x9A'
          
'\xD0\x9B''\xD0\x9C','\xD0\x9D','\xD0\x9E','\xD0\x9F'
          
'\xD0\xA0','\xD0\xA1','\xD0\xA2','\xD0\xA3''\xD0\xA4'
          
'\xD0\xA5','\xD0\xA6','\xD0\xA7','\xD0\xA8','\xD0\xA9'
          
'\xD0\xAA','\xD0\xAB''\xD0\xAC','\xD0\xAD','\xD0\xAE'
          
'\xD0\xAF','\xD1\x97','\xD0\x87','\xD1\x94','\xD1\x96'
          
'\xD0\x86','\xD2\x91','\xD2\x90','\xD1\x9E','\xD0\x8E'
          
'\xD1\x91','\xD0\x81','\xD0\x84'); 
my @win=('а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н'
         
'о','п','р','с','т''у','ф','х','ц','ч','ш','щ','ъ','ы','ь'
         
'э','ю','я','А','Б','В','Г','Д','Е','Ё''Ж''З','И','Й','К'
         
'Л','М','Н','О''П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ'
         
'Ъ','Ы','Ь','Э','Ю','Я','ї','Ї','є''і' ,'І','ґ','Ґ','ў','Ў','ё','Ё','Є'); 
 
no strict

@
hash{@win}=@utf8
%
conv=%hash

 
foreach 
my $sym(keys %conv) { 
    
$mess=~s/$sym/$conv{$sym}/g

return 
$mess

а если для сайта на cp1251, то просто
PHP код:
$req->header('Content-type: text/html; Charset=utf-8'); 
это если используешь LWP
SHiNiGaMi вне форума   Ответить с цитированием
Старый 10.10.2010, 22:05   #16
obey
 
Регистрация: 17.07.2010
Сообщений: 5
Репутация: 0
По умолчанию

SHiNiGaMi, не учи людей делать неправильно.

daniel_1024, если надо работать именно с cp1251, то надо выставить соответствующую локаль и сказать интепретатору, чтобы учитывал её:
PHP код:
use POSIX qw(setlocale LC_CTYPE);
use 
locale;

setlocale LC_CTYPE'ru_RU.CP1251'
Теперь, например, метасимвол \w будет матчить русские буквы.
Если работать надо с utf-8, то достаточно написать сам исходник в utf-8 и сказать об этом интерпретатору:
PHP код:
use utf8
.
obey вне форума   Ответить с цитированием
Старый 14.10.2010, 20:34   #17
SynQ
 
Регистрация: 11.07.2010
Сообщений: 953
Репутация: 352
По умолчанию

Правильно ли я понимаю, что в данной ситуации (инклудим _внутри_ пути через $privet) старая фича с пайпом для выполнения команд не сработает:
Цитата:
$include = "/home"."/$privet";
open (DATA,"<$include/123.txt") || print "sorry, master";
PS Нуль-байт проходит.
SynQ вне форума   Ответить с цитированием
Старый 12.02.2011, 13:31   #18
SHok
 
Аватар для SHok
 
Регистрация: 04.01.2011
Сообщений: 4
Репутация: 0
По умолчанию

Как генерировать хеш по маске, есть 2 функцыи md5() и sha1(), есть такая маска :
md5(lolsha1(text)lol)
как виполнить сначало те функцыи что в середине а потом те что наружу, собственно сама проблемма заключается, в том
что скобки вложенные = \ Потому что сначала срабатевают функцыи которые надодятся "сверху" =/
SHok вне форума   Ответить с цитированием
Старый 13.02.2011, 01:06   #19
apache3
 
Регистрация: 13.01.2011
Сообщений: 22
Репутация: 3
По умолчанию

$LIMIT = shift || 5000;

perl script.pl 31337

в данном случае $LIMIT будет равен 31337.
если аргумент пустой,то 5000.
apache3 вне форума   Ответить с цитированием
Старый 13.02.2011, 01:13   #20
apache3
 
Регистрация: 13.01.2011
Сообщений: 22
Репутация: 3
По умолчанию

Цитата:
Сообщение от SynQ Посмотреть сообщение
Правильно ли я понимаю, что в данной ситуации (инклудим _внутри_ пути через $privet) старая фича с пайпом для выполнения команд не сработает:


PS Нуль-байт проходит.
open (DATA,"<$include/123.txt")

'<' этот символ не даст выполнить команду. По крайней мере так упоминалось в доке от RFP.
Возможно,что стоит пофаззить это дело - так как у перла есть много тупых и странных багов внутри самого себя и какие-то спецсимволы смогут помочь.
apache3 вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot