Просмотр полной версии : [Perl] Новичкам: задаем вопросы
Страницы :
[
1]
2
3
4
5
6
7
В этой специальной теме новички могут задавать простые вопросы по языку Perl.
ээээээээээ типо я новичком буду сення
вообщем есть лажа в модуле tk -- getsavefile и getopenfile --- все пашет да выбираются файлы которые нужно открыть или сохранить ----- вот беда не дружит перл с великим и могучим и русские имена папок и файлов ну хоть убей не воспринимает --- можно это какнить подправить --- наверное можно гонять через encode потому что проблема с кодировкой однозначно -- но хотелось бы чтонить поизящнее -- что вы можете предложить
use locale;
use encoding 'cp1251';
Lancellot
26.05.2007, 16:01
Привет!
начал изучать Perl но вот не могу найти нормального Perl-редактора,посоветуйте
какой лучше выбрать,я понимаю каждому свое, но всетаки интересно мнение
понимающих людей+)
желатеьно бесплатный
спс!
UltraEdit-32 поддерживает подсветку синтаксиса перла подефолту, если нужен именно редактор, а не IDE. При желании его можно запрячь как IDE в некотором смысле, в менюшках сделать команду запуска интерпретатора.
Кстати, подсветка синтаксиса настраивается. Можно добавить любой язык.
Кстати, тут постить стоит новичкам с вопросами непосредственно о языке. Обо всем остальном отдельные треды создаем типа "Кто знает хорошую IDE для Perl"
perl-mode в emacs, есть нормальный интерфейс с отладчиком(это сам не пробовал, но по идее через gud должно работать).
ЗЫ. Но это не для новичка
use locale;
use encoding 'cp1251';
ну это я и так знаю -- но серавно непойдет -- конечно теперь он имя воспримит- т.е эрора уже не выдаст -- но вылазит другая проблема =)
допустим мы сделали getopenfile --- запихнули имя в переменную -- пусть $name
далее пытаемся открывать чтобы сделать все что нам нужно --- и опаньки вылетаем в эрором при открытии --- а все потому что perl то хочет видить не перекодированное имя файла и уж тем более не в cp1251 -- так что нам придется еще раз декодить этот текст из cp1251 в кодировку понятную перлу =) вот такие пироги ------ я вот и спрашивал вообщето можно какнить обойтись без этих принудительный кодирований несколько раз
есть текстовой файл с мылами в строчку через запятую с пробелом. задача: поставить их в столбик (без запятой)
#!usr/bin/perl -w
open(MYFILE, "e-mails.txt") || die "Can't open this file: $!";
@contents=<MYFILE>;
@new=grep s/, /\n/, @contents;
close(MYFILE);
open(NEWFILE, ">>new.txt") || die "Can't open this file: $!";
print NEWFILE @new;
close(NEWFILE);
close(MYFILE);
получается, что в файл new.txt копируется содержимое e-mails.txt, grep выполняется только один раз. а надо, чтобы столько, сколько всего ", ".
как правильно?
еще вопрос: как создать файл, а не использовать существующий?
всего 2 вопроса. Спасибо.
ну както так
open $in,"in.txt";
opne $out,">out.txt";
while($a=<$in>){
$a=~s/,/ /;
print $out $a;
}
close $in,$out;
вот как то так
все равно делает только один раз=\
что значит $a=<$in> ?
и зачем тут $a=~s/, / \n/; нужен знак ~ ?
Digimortal
27.05.2007, 22:23
все равно делает только один раз=\
что значит $a=<$in> ?
и зачем тут $a=~s/, / \n/; нужен знак ~ ?
почитайте учебник чтоле какой простенький или хоть статейку про perl-регекспы..
чтоб произвести глобальную замену :
$a=~/, /\n/g
почитайте учебник чтоле какой простенький или хоть статейку про perl-регекспы..
чтоб произвести глобальную замену :
$a=~/, /\n/g
я читал. то была теория. а это практика) не всегда же все с первого раза получается))
а вот про /g я забыл. мде. спасибо=)
ебанутая тема... такие темы "ленивят" людей!
еще один вопрос. как задать соответствие в регулярных выражениях. нужно заменить символ A на B, а С и D на E одним выражением . если вопрос слишком глупый, можете стереть его, после того, как будет дан ответ. ведь намного проще отписать пару строчек, чем сидеть и рыться в манах. спасибо
#!usr/bin/perl -w
open $in,"in.txt";
open $out,">out.txt";
$in=~ tr/, <>/\n/g;
print $out $in;
close $in,$out;
символы ', ' (запятая с пробелом) должны меняться на первод строки, а '<' и '>' исчезать. спасибо за оказанную помощь :)
ЗЫ странно, у меня теги не пашут...
Помогите найти админку на _http://my-xchange.com
Помогите найти админку на _http://my-xchange.com
а при чем тут перл?
C!klodoL
10.06.2007, 23:18
вот значит скрипт калькулятора...
$x = 0;
$y = 0;
$oper = "";
print "a=\n";
$x = <>;
chomp ($x);
print "operation +, -, *, /:\n";
$oper = <>;
chomp ($oper);
print "b=\n";
$y = <>;
chomp ($y);
if ($oper eq "+") {$result = $x + $y;}
elsif ($oper eq "-") {$result = $x - $y;}
elsif ($oper eq "*") {$result = $x * $y;}
elsif ($oper eq "/") {$result = $x / $y;}
print "$result";
<>;
как мы видим он определяет математическую операцию сравнивая введенный символ с сопоставленным операции, я же хочу чтобы было примерно так
print "a=\n";
$a = <>;
print "operation:\n";
$oper = <>;
print "b=\n";
$b = <>;
$c = $a [и тут как нибудь вставить переменную $oper] $b;
print "$c";
как мы видим он определяет математическую операцию сравнивая введенный символ с сопоставленным операции, я же хочу чтобы было примерно так
...
$c = $a.$oper.$b;
print "$c";
?
+toxa+, он хочет чтобы это выполнилось, а не просто напечаталось "$a оператор $b"
C!klodoL
11.06.2007, 00:53
точно _Great_, чтобы выполнялось, не присвоить переменной C переменные a, oper, b. А чтобы было так $c = $a $oper $b где $oper это + или - или / или *
Digimortal
11.06.2007, 07:53
C!klodoL,
print "a=\n";
$a = <>;
print "operation:\n";
$oper = <>;
print "b=\n";
$b = <>;
$c = $a.$oper.$b;
print eval "$c";
Не давно начил изучать php вот что я попробовал сделать <?
$a=5*2;
$b=11;
if($a<$b){
echo'$a меньнше $b';
else if ($a>$b){
echo'$a больше $b';
}
?>
Почему не пашет ?(
else if ($a>$b)
надо вроде
elsif ()
А вообще ты не в ту тему запостил)
GoreMaster
11.06.2007, 18:29
<?
$a=5*2;
$b=11;
if($a<$b){
echo'$a меньнше $b';
}
elseif ($a > $b){
echo'$a больше $b';
}
?>
вот работает.
Ты забыл } перед elseif
else if ($a>$b)
надо вроде
elsif ()
А вообще ты не в ту тему запостил)
ой извените плз :rolleyes:
чем уникален перл от других языков программирования?
чем уникален перл от других языков программирования?
1) это язык скриптов (delphi или c++ не могут этим похвастаться :) )
2) скрипты на perl выполняются со стороны сервера (в отличии от js)
3) насколько я знаю, perl отличается от php тем, что в основном направлен на работу со строками (reg exp итд)
возможно, третий пункт не совсем правильно сформулировал.
ЗЫ грамотнее будет: ;)
в чем заключается уникальность перла среди/по отношению к...
или
чем отличается перл от...
blackybr
12.06.2007, 16:22
на тему калькулятора %))))
#!perl
my $argc = @ARGV;
my $ans = eval($ARGV[0]);
print "\t$ans \n";
exit 0;
Digimortal
12.06.2007, 23:46
blackybr,
ну, если уж на тему калькулятора, то вот:
#!perl
print eval $ARGV[0]
(непойму, зачем писать стока лишнего кода.. =))
D:\>perl calc.pl sin(3)+cos(1/2)
1.01870256995024
удобно получается.. )
хм.. вот такой вопрос в чем преимущества Perl перед PHP
ээээээ ни в чем -- php больше заточен под веб -- а perl больше под локальное использование или юзанье с шелла =)
ну а на практике если где у perl'a приемущества
я просто пытаюсь понять на сколько оно мне надо=)))
UnrealMAN
16.06.2007, 12:42
У перла преимущество в скорости. Работа с файлами, регэкспы, все это перл делает быстрее. Но перл сложнее пхп, но я думаю это не существенно )) Еще перл программисты больше ценятся. :)
rкаждый олжен занть перл -- его должны учить в дет садах -- а самые красивые регекспы должны передаваться по наследству -- это чтобы ты понял какой это невье**нный язык
его должны учить в дет садах а ты его наверное вместо русского языка в школе учил %)
как раз русский я не учил угогогого
C!klodoL
24.06.2007, 03:19
как сделать поддержку кириллицы в перл, чтобы он нормально выводил ее, накидайте пожалуйсто простенький пример
ну если в консоль я помнится делал так -- но это жесть $xz='пример:';$xz=~tr/а-я/\x80-\x9f/;print "$xz"; - и большими буквами
в общем бери таблицу символов и заменяй одно на другое по их коду
можно еще
use encoding 'cp1251';
просто в вин консоль идет в dos кодировке -- в никсах в utf --- а скрипт может быть написан или на cp1251 или на томже utf
Digimortal
25.06.2007, 17:24
ну если в консоль я помнится делал так -- но это жесть $xz='пример:';$xz=~tr/а-я/\x80-\x9f/;print "$xz"; - и большими буквами
а почему ж нельзя и маленькие буквы сделать? Ниче сложного тут нету:
sub cyr
{
$phrase = shift;
$phrase =~ y/А-яЁё/\x80-\xaf\xe0-\xf1/;
return $phrase;
}
print cyr('АБВГДЕЁЭЮЯабвгдеёэюя');
да я как бы в курсе что можно =) просто там большими
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");
вот со статьи вырезал скрипт который берет проксю коннектится к неи и отправляет пакет =) юзай 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 через проксю
вот те дока по lwp и io --- может поймешь глупость посл вопроса пример оттуда
http://slil.ru/24578629
perldoc IO::Socket::Socks
посоветуйте, грамотную литературку с примерами и т.д. Для изучения перла (как локального приложения)
Bars_TT, книжек много, но не могу не посоветовать Perl Cookebook, неплохо для новичков.
C!klodoL
12.07.2007, 01:13
Освой Самостоятельно Perl за 24 часа.pdf эта книжка неплохая имхо, по крайней мере мне нравится
Освой Самостоятельно Perl за 24 часа.pdf эта книжка неплохая имхо, по крайней мере мне нравится
само название книги говорит за себя... невозможно выучить язык такого уровня за 24 часа, синтаксис - да, язык - нет.
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:
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 Москва,
Но мне нужно что бы вводилось три и более параметров...
Основная проблема у меня в
if(($cmd, $params) = $msg =~ /^\!([^\ ]+) (.+)$/)
Так как я только начинаю в программировании, еще плохо разбираюсь, получилось примерно такое:
if(($cmd, $params1, $params2) = $msg =~ /^\!([^\ ]+) (.+) (.+)$/)
{
$result = exists($functions{$cmd}) ? $functions{$cmd}($params1) : $functions{$cmd}($params2);
$client->send_im($uin, $result) if $result; sleep(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
спасибо, но я уже сам додумал скрипт ))
Как совместить Tk и 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
.
use Tk;
use threads;;)
да Ксурент .. ))) я серьёзно... при использовании их
прут ерроренги.. =\
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 читаю, нравится, вот ошибка вылетает. блин
C:\>perl -e "$write=24; $two=2;$rez=$two * $write; print $rez;"
48
вот както так -- точки с запятой не забывай
#/usr/bin/perl -w $write = 24
$two =3
$rez = $write * $two
вот сижу уже минут 20 читаю, нравится, вот ошибка вылетает. блин
ахуеть чувак, с таким же успехом ты можешь код на питоне совать в интерпретатор пхп
ЗЫ: http://translate.google.com/
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 и присвоить их переменным
/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
или нет..короче напишите знактооки перла че да как..заранее всем благодарен!!!!
Подскажите вот такую весчь:
есть сайт-архив валлпаперов - 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;
---
вот как то так
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
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-- жесть
я простой сталевар я варю жесть =) -- мда чет у меня substr из головы вылетел сидел вчера ночью бумал как бкувы срезать =)
Скажите, как сделать так, что бы при обходе хэша в цикле его элементы выводились в нужном порядке.
Пример:
%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
vladest проверь то же самое от 1 до 5. вроде ошибки нет=\
Скажите, как сделать так, что бы при обходе хэша в цикле его элементы выводились в нужном порядке.
Пример:
%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 проверь то же самое от 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";
}
%hash =('1'=>'1',
'2'=>'2',
'3'=>'3');
foreach $k (sort keys %hash){
print "$k => $hash{$k} \n";
}
Не подходит! мне нужно выводить хэш так, как я его забиваю! Это всего лишь пример (моя ошибка)
Digimortal
30.07.2007, 16:39
>> Не подходит! мне нужно выводить хэш так, как я его забиваю! Это всего лишь пример (моя ошибка)
используй тогда массив из хешей..
или, может, проще просто массив использовать?
используй тогда массив из хешей..
или, может, проще просто массив использовать?
Да лучше массив с указателями... спасибо
Digimortal
31.07.2007, 13:33
vladest,
сейчас вот случайно наткнулся на один модуль, который будет удобно использовать для решения вашей проблемы:
Tie::IxHash называется.. (http://search.cpan.org/src/GSAR/Tie-IxHash-1.21/lib/Tie/IxHash.pm)
use Tie::IxHash;
tie my %hash, 'Tie::IxHash';
%hash =('1'=>'1',
'2'=>'2',
'3'=>'3');
while ( ($k, $v) = each(%hash) ){
print "$k = $v \n";
}
выводит в заданном порядке..
Ща протестим....
ОО! спасибо! очень помогло!
Помогите!
Нужно сделать так:
Я например ввожу ip и\или параметры и он запускает приложение с этими параметрами
C!klodoL
05.08.2007, 23:27
Помогите!
Нужно сделать так:
Я например ввожу ip и\или параметры и он запускает приложение с этими параметрами
я так понял нужно запустить из перл скрипта приложение? ну тогда так system('notepad.exe');
Добавлено: перечитал несколько раз, похоже что ты шелл чтоли хочешь
Ну изложу полностью.
Кароче мне нужно ввести ip и после этого с параметрами+этот ip запускается прога.
это надо так изъясняться..
system позволяет передавать параметры.
чет ты обьясняешься передавай через @ARGV ---- типо если запускаешь скрипт как some_script.pl 127.0.0.1 --- то 127.0.0.1 будет храниться в @ARGV[0] которую можешь юзать в скрипте
sub upload(){
my $req = POST $URL,
Content_Type => 'multipart/form-data',
Content => [Content_Type => 'form-data',
filename => [$nam], ];
my $res=LWP::UserAgent->new->request($req); $content = $res->content;
if ($content=~/загружен на сайт./){print "$name - OK\n"} }
Выше представленная функция загружает файл на сайт через POST запрос.
Однако есть одна неприятность - при загрузке жрет очень много памяти (при загрузке 20mb файла лопает ~500mb оперативы)
Внимание вопрос: как убрать ограничение на загрузку файла и при этом, сделать что бы памяти столько не жрал ???
Выслушаю любые советы и предложения, возможно даже применение другого языка программирования... (желательно что бы на *nix'aх работало)
Выслушаю любые советы и предложения, возможно даже применение другого языка программирования... (желательно что бы на *nix'aх работало)
Sockets (C)
Sockets (C)
Спасибо, думал о том что бы в ручную запрос формировать, но в конечном итоге все равно в память все запихнет (хотя не проверял может займусь в скором времени).
Если есть исходники plz не жадничайте...
По теме:
http://forum.vingrad.ru/forum/topic-166268/kw-perl-upload-socket-загрузка-файл.html
отправлять кусками и делать паузы, чем меньше куски тем мешьше памяти требуется, все равно ты данные сгрузил в сокет а они еще долго не уйдут, так смысл все разом пихать
По теме:
http://forum.vingrad.ru/forum/topic-166268/kw-perl-upload-socket-загрузка-файл.html
Собственно там тоже самое, что и у меня.
При таком варианте и при загрузке больших файлов лопает много памяти, так что не подходит... но все равно спасибо...
отправлять кусками и делать паузы, чем меньше куски тем мешьше памяти требуется, все равно ты данные сгрузил в сокет а они еще долго не уйдут, так смысл все разом пихать
Как то очень слабо я себе это представляю тем более реализацию на perl'e. PS Firefox запросто может отправлять файлы размером >700mb задача добиться того же...
flipper, собери запрос сам и отправь с помощью сокетов.
Digimortal
07.08.2007, 00:05
flipper
If you set the $DYNAMIC_FILE_UPLOAD variable (exportable) to some TRUE value, then you get back a request object with a subroutine closure as the content attribute. This subroutine will read the content of any files on demand and return it in suitable chunks. This allow you to upload arbitrary big files without using lots of memory. You can even upload infinite files like /dev/audio if you wish;
это из доки HTTP::Request::Common - Construct common HTTP::Request objects
скажите пожалуста где я могу задать вопрос по эксплоитам на языке perl
gigabait
11.08.2007, 13:56
привет подскажыте с перлом разобратса.
не могу не как скрипты запускат т.е на хост лажу а они на работают что в етой строке #!/usr/bin/perl или #!/usr/local/bin/perl надо песать не как не пойму вроде дорогу там дге скрипт лежыт на хосте или что заепался е етим не как разобратса не могу.
скачал етот перел актив запускаю скрипт лажу на хост в папку cgi или cgi-bin если ест инструкция к скрипту делаю как написано но нечего не работает.
подскажыте че делать искал в гоогле нашол чтот но не для новичков и еще че там в Спанел надо сделать перед использаванием скриптов на перле.
надо узнать где дериктория роот апачя чето в етом роде не куя не понял подскажыте ПЛЗ или если кому не трудно стукните ПЛЗ аська 358850490 зарание спасибо!!!
__________________
Digimortal
11.08.2007, 19:03
gigabait
даже если вы совсем нерусский, то все равно, можно хотя бы знаки препинания расставлять нормально..
а вообще, не захламляйте эту тему своим тупизмом, на форуме тема "про то как запускать перл-скрипт" уже и так освещалась, причем далеко не один раз..
C!klodoL
25.08.2007, 19:21
вопрос про многопоточность, привожу код:
#тут создаются потоки:
for( 0..$thr ) { $trl[$_] = threads->create( \&Flood, $_ ); }
for( 0..$thr ) { $trl[$_]->join; }
#сама функция
sub Flood
{
$sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') || сокет или смерть
.... ....
}
$host и $port - это адрес и порт прокси сервера, ни ко всем прокси удается подключится, будет ли в этом случае поток которому не удалось подключится висеть в памяти или сам умрет? если будет, то его нужно убить, как вызвать смерть потока в случае если создать сокет не удалось? знаю что $thr->kill() но как им правильно воспользоваться?
сейчас у меня сделано так, хз на сколько это правильно
$sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') || return 0;
если ты его не убьешь то он будет висеть некоторое время пока не очистится оператива так переполнение вызвать можно в легкую -- лудше делай определенное количество потоков и чтобы они последовательно выдирали из списка проксю за проксей -- типо поток выдернул одну проверил потом еще одну из списка и тд и завершай через join
а есть сплоит ipb 2.1.7. на перле?
biophreak
27.08.2007, 13:39
Имхо немного темой промахнулся...
вопрос про многопоточность, привожу код:
#тут создаются потоки:
for( 0..$thr ) { $trl[$_] = threads->create( \&Flood, $_ ); }
for( 0..$thr ) { $trl[$_]->join; }
#сама функция
sub Flood
{
$sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') || сокет или смерть
.... ....
}
$host и $port - это адрес и порт прокси сервера, ни ко всем прокси удается подключится, будет ли в этом случае поток которому не удалось подключится висеть в памяти или сам умрет? если будет, то его нужно убить, как вызвать смерть потока в случае если создать сокет не удалось? знаю что $thr->kill() но как им правильно воспользоваться?
сейчас у меня сделано так, хз на сколько это правильно
$sock = IO::Socket::INET->new(PeerAddr => $host,
PeerPort => $port,
Proto => 'tcp') || return 0;
а переменная $thr за что отвечает?
C!klodoL
08.09.2007, 12:51
а переменная $thr за что отвечает?
за количество потоков
скажите полста как открыть програмку на перле через ms-dos сам скрипт имееца но вот как его запустить в вин хп ? зарание благодарен
C!klodoL
08.09.2007, 13:35
можно двойным кликом, если у тебя файлы pl ассоциированны с интерпретатором, если нет то в командной строке perl script.pl, если ты скачал перл в архиве то, C:\Perl\bin\Perl.exe script.pl
подскажите плиз , 1. каким редактором проще пользоваться новичку есть ли с русским языком , *? приведите пример написания калькулятора в подробностях если не тяжело , за рание спасибо .
Digimortal
09.09.2007, 13:18
>> 1. каким редактором проще пользоваться новичку есть ли с русским языком , *?
любым, который тебе будет удобен.. насчет русского языка не совсем понятно..
>> приведите пример написания калькулятора в подробностях если не тяжело
пример калькулятора уже приводился в этой теме..
подскажите плиз , 1. каким редактором проще пользоваться новичку есть ли с русским языком , *?
Notepad2
>> 1. каким редактором проще пользоваться новичку есть ли с русским языком , *?
любым, который тебе будет удобен.. насчет русского языка не совсем понятно..
>> приведите пример написания калькулятора в подробностях если не тяжело
пример калькулятора уже приводился в этой теме..
если не тяжело можна ссылочку по теме про калькулятор и как запустить свою первую програмку
за рание спасибо.
Digimortal
09.09.2007, 21:45
>> если не тяжело можна ссылочку по теме про калькулятор
я ж написал, что в этой теме...
>> и как запустить свою первую програмку
мдя... =/
открываешь консоль, переходишь в директорию, где лежит твой скрипт,
и запускаешь строкой:
perl <имя файла скрипта> <параметр1> <параметр2> . . . <параметрn>
параметов может и не быть..
Пример: создаешь файл calc.txt с содержимым:
print eval ARGV[0]
запускаешь cmd.exe, переходишь в диру с этим файлом (ну можно и не переходить а просто указать полный путь к нему), и запускаешь:
perl calc.txt (5+8)*4
вот как делаю я , и что с етого получаеться :( ....
установил ActivePerl на с:\
создал файл sploit.pl
, и сохранил в дирк. bin
путь к файлу получаеться С:\ActivePerl\perl\bin\sploit.pl
запускаю cmd
С:\ActivePerl\perl\bin\sploit.pl а оно мне в блокноте окрывает скрипт в формате тхт. , что не так делаю
как мне зделать что б запустилось сама програмка ?
1) ActivePerl ассоциирует все файлы *.pl с интерпретатором, так что вся твоя задача должна сводиться к клику мыши.
2) Т.к у тебя как я понял ассоциация идет с блокнотом, то просто написав в консоле С:\ActivePerl\perl\bin\sploit.pl ты откроешь свой исходник в блокноте, нужно запустить интерпретатор перл в cmd, указав в качестве параметра файл с исходным кодом(perl sploit.pl).
1) ActivePerl ассоциирует все файлы *.pl с интерпретатором, так что вся твоя задача должна сводиться к клику мыши.
2) Т.к у тебя как я понял ассоциация идет с блокнотом, то просто написав в консоле С:\ActivePerl\perl\bin\sploit.pl ты откроешь свой исходник в блокноте, нужно запустить интерпретатор перл в cmd, указав в качестве параметра файл с исходным кодом(perl sploit.pl).
наведи пример пожалуста а то не получаеться вот я делаю даже так
С:\ActivePerl\perl\bin\perl sploit.pl
а оно говорит что / системе не дуветься нати указаный диск , увы :(
вот делаю C:\activeperl\perl\bin\perl sploit.pl а мне в отвед ерор
C:\activeperl\perl\bin\perl sploit.pl не являеться приложением win32
.. что не так
запускать нужно просто perl sploit.pl
запускать нужно просто perl sploit.pl
ну если не тяжело по подробней розпиши , а то я уже задом на перед писал нихера не запускаетьсо , а так обидно и хочеццо запустить скрипт (((((((
жмешь пуск -- выполнить -- вводишь cmd -- появляется консоль -- в ней вводишь -> perl script.pl -- это если скрипт находится в текушей открытой папке -- если нет то пиши perl и путь до скрипта тнапример C:\papka\sploit_tyt_legit.pl
жмешь пуск -- выполнить -- вводишь cmd -- появляется консоль -- в ней вводишь -> perl script.pl -- это если скрипт находится в текушей открытой папке -- если нет то пиши perl и путь до скрипта тнапример C:\papka\sploit_tyt_legit.pl
ну вот ! так и делаю вот что пишет : "perl" не являеться внутренней или внешней командой, исполняемой программы или пакетным файлом.
тут что-то не то
народ!
помогите, я чёта в рубиться не могу....
кароч у меня есть около 60 фоток и мнe их надо переименовать с помощью перла! план таков...это => "SNC115XX.JPG" надо переименовать в это => 1-60".jpg" и так пока все фотки не переименуются!
Mлин, как это осуществить?
PS: тёща....как у тя в сплойте путь к перлу прописан?
Digimortal
13.09.2007, 18:53
Tw!m4
1. открываешь диру ( opendir )
2. считываешь содержимое диры в массив ( readdir )
3. перееименовываешь в цикле каждый элемент массива ( foreach $file (@files) { )
в блоке цикла проверяешь регулярным выражением соответствует ли имя файла тем, что нужно переименовать, если соответствует:
rename $file, ++$num.'jpg';
переменную $num инициализируешь нулем, за пределами блока, конечно..
Ну вот, на сколько я понял, проходит эта всё таким путём
#!/usr/bin/perl -w
#use strict;
use File::Copy;
my $num=0;
my $dir="/path/to/dir";
opendir(DIR, $dir) or die $!;
@files=readdir(DIR);
foreach $file (@files) {
$_ =~ m/([a-zA-Z])\d+?/g; # <= вот сдесь у меня проблема!
rename $file, ++$num.'txt';
}
closedir(DIR);
Я тока начал изучать Перлу и с регекспами у меня немножко( то есть оОчень большая =] ) не лажа, need help please! =]
ну вот ! так и делаю вот что пишет : "perl" не являеться внутренней или внешней командой, исполняемой программы или пакетным файлом.
тут что-то не то
теща Помоему у тебя perl не стоит. Попробуй просто в cmd введи perl -v .Такая команда показывает какая версия perl установлена. Если снова такая же мессага вылетит, значит переставляй Perl
Digimortal
14.09.2007, 04:03
Tw!m4
#!/usr/bin/perl -w
use strict;
# use File::Copy; ## это не нужно
my $num=0;
my $dir="/path/to/dir/";
opendir(DIR, $dir) or die $!;
my @files=readdir(DIR);
foreach my $file (@files) {
# $_ =~ m/([a-zA-Z])\d+?/g; # <= вот сдесь у меня проблема! ## про регексп я написал, исходя из того, что в дире с файлами, которые надо переименовать, могут находиться те, которые переименовывать не надо.. если это не так, то можно и без регулярного выражения обойтись.. но, допустим, файлы, которые надо переименовывать оканчиваются на 'JPG' (как у тебя написано), тогда мы переименовываем, проверяя на это:
rename $dir.$file, $dir.++$num.'.jpg' if $file =~ /JPG/; ## ну понятное дело ренейму надо знать в какой дире файлы эти лежат )
}
closedir(DIR);
ты был прав , переустановляю (((((....
Tw!m4
#!/usr/bin/perl -w
use strict;
# use File::Copy; ## это не нужно
my $num=0;
my $dir="/path/to/dir/";
opendir(DIR, $dir) or die $!;
my @files=readdir(DIR);
foreach my $file (@files) {
# $_ =~ m/([a-zA-Z])\d+?/g; # <= вот сдесь у меня проблема! ## про регексп я написал, исходя из того, что в дире с файлами, которые надо переименовать, могут находиться те, которые переименовывать не надо.. если это не так, то можно и без регулярного выражения обойтись.. но, допустим, файлы, которые надо переименовывать оканчиваются на 'JPG' (как у тебя написано), тогда мы переименовываем, проверяя на это:
rename $dir.$file, $dir.++$num.'.jpg' if $file =~ /JPG/; ## ну понятное дело ренейму надо знать в какой дире файлы эти лежат )
}
closedir(DIR);
отлично! Всё сработало!
Сорри за тупой вопрос. Нужно удалить из файла все строки, начинающиеся со "*". Делаю кривым путём
open (MYFILE, 'p.txt');
open(TEMP,'>>p~.txt');
while (<MYFILE>)
{
if ( substr($_, 0, 1) != "*")
{
chomp;
print TEMP "*".$_."\n";
}
}
close (MYFILE);
close(TEMP);
rename("p~.txt", "p.txt");
Файл становится пустым (p.txt). Хотя первый символ определяет правильно. Подскажите в чём прикол?
P.S. Я понимаю, что вся эта байда с двумя файлами вообще не нужна, но, по возможности, объясните в чём трабл, а не придумывайте простые решения. Заранее спасибо ;)
demonoid
15.09.2007, 23:07
2 malamut
#!/usr/bin/perl -w
use strict;
use warnings;
use constant BACKUP_PREFIX => 'backup_';
use constant COMMENT => '\x2A';
use Getopt::Std;
my %options;
getopts( "f:" , \%options );
if( !exists $options{f} )
{
&usage;
}
else
{
my $m_file = $options{f};
&sort( $m_file );
}
sub sort
{
my $m_file = shift;
my $b_file = BACKUP_PREFIX."$m_file";
my $comment = COMMENT;
my @save = undef;
my @backup = undef;
open( my $file_m, "+<", $m_file ) || exit print "ERROR:Cant\'t open $m_file";
open( my $file_b, ">", $b_file ) ;
my $i = 0;
my $b = 0;
my $g = 0;
while( <$file_m> )
{
if( substr($_, 0, 1) =~/$comment/ )
{
$b++;
}
else
{
$save[$g] = $_;
$g++;
}
$backup[$i] = $_;
$i++;
}
foreach ( @save )
{
print $file_m "$_";
}
close( $file_m );
foreach ( @backup )
{
print $file_b "$_";
}
close( $file_b );
&stats( $i,$b,$g,$m_file,$b_file );
}
sub stats
{
my $comment = COMMENT ;
my( $all,$good,$bed,$file_m,$b_file ) = ( shift,shift,shift,shift,shift );
printf "\t In all the lines : %.3d \n".
"\t Lines Containing '%.4s' : %.3d \n".
"\t Lines not Containing '%.4s' : %.3d \n\n".
"\t Lines, Containing is stored in : %s \n".
"\t A back-up copy is stored in : %s \n",$all,$comment,$good,$comment,$bed,$file_m,$b_file ;
}
sub usage
{
print "\t Usage : $0 -f <file> \n".
"\t Example : $0 -f file.txt \n";
exit 1;
}
Мой файл : file.txt
*line1
line2
line3
*line4
запускаем : perl -f file.txt
Статистика :
In all the lines : 005
Lines Containing '\x2A' : 002
Lines not Containing '\x2A' : 003
Lines, Containing is stored in : file.txt
A back-up copy is stored in : backup_file.txt
Смотрим файл:file.txt
line2
line3
бекап в файле backup_file.txt
Digimortal
15.09.2007, 23:09
malamut
open (MYFILE, 'p.txt');
open(TEMP,'>>p~.txt');
while (<MYFILE>) {
print TEMP '*'.$_ if substr($_, 0, 1) ne '*'; ## тут надо использовать ne, т.к. строка
## как вариант можно использовать регексп:
## print TEMP '*'.$_ if not /^\*/;
## кстати незачем делать chomp, а затем снова добавлять перенос строки...
}
close (MYFILE);
close(TEMP);
rename('p~.txt', 'p.txt');
#!/usr/bin/perl -w
use strict;
# use File::Copy; ## это не нужно
my $num=0;
my $dir="/path/to/dir/";
opendir(DIR, $dir) or die $!;
my @files=readdir(DIR);
foreach my $file (@files) {
# $_ =~ m/([a-zA-Z])\d+?/g; # <= вот сдесь у меня проблема! ## про регексп я написал, исходя из того, что в дире с файлами, которые надо переименовать, могут находиться те, которые переименовывать не надо.. если это не так, то можно и без регулярного выражения обойтись.. но, допустим, файлы, которые надо переименовывать оканчиваются на 'JPG' (как у тебя написано), тогда мы переименовываем, проверяя на это:
rename $dir.$file, $dir.++$num.'.jpg' if $file =~ /JPG/; ## ну понятное дело ренейму надо знать в какой дире файлы эти лежат )
}
closedir(DIR);
использование strict; и как следствие my -- тут не совсем целесообразно тк скрипт маленький и я думаю имена всех переменных можно и самому запомнить - я это к тому чтобы новички не вбили себе что надо всегда юзать стрикт и все переменные объявлять через my - вот вообще никогда его не юзаю и пишу - нормально работающие скрипты -- тут есть выбор
Digimortal
16.09.2007, 02:44
>> вот вообще никогда его не юзаю и пишу - нормально работающие скрипты
ну так ты серьезных скриптов никогда не писал.. :P
я согласен, что в небольших скриптах использование strict вовсе не обязательно, тем не менее как тока размер твоих скриптов начинает увеличиваться, начинает увеличиваться и количество ошибок, число которых strict помогает сократить.. имхо, новичкам как раз рекомендуется юзать strict..
кроме того, например, разработка веб-приложений под modperl, обязует программера использовать strict..
есть перл скрипт эксплоита для wordpress как его привести в рабочее положение,только если можно подробнее
perl mega_xek_0day_odept_ploet.pl
Вообще поиск по форуму рулит
Помогите пожалуйста, можете сказать где здесь ошибка:
printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n",
printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n"); мб так?
Прошу прощения, вот он весь код:
printf $socket ("GET %sindex.php?act=Login&CODE=autologin HTTP/1.0\nHost: %s\nAccept: */*\nCookie: member_id=%s; pass_hash=%s%s%s%s%s\nConnection: close\n\n",
$path,$server,$cmember_id,$pass_hash1,$cmember_id, $pass_hash2,$pass_hash3,$nmalykh);
Выводится такая ошибка:
Can't use an undefined value as a symbol reference
Digimortal
22.09.2007, 22:06
~EviL~
ошибка в том, что у тебя $socket похоже не определен..
имхо, printf тут не к месту, ведь можно обойтись простым print'ом..
мне страницу нужно вытащить. https://..... в инете ничего путного не нашел =\ кто нибудь может направить на путь истинный или готовый вариант (если есть).
George767
28.09.2007, 17:54
мне страницу нужно вытащить. https://..... в инете ничего путного не нашел =\ кто нибудь может направить на путь истинный или готовый вариант (если есть).
Смотри в сторону curl
))))) я видел такой же ответ на каком то форуме. не нужно копипастить. я же сказал что искал в инете. незнаю как там в с curl в перл. но пхп мне лень переустонавливать что бы добавить эту библиотеку ради одного случая
Digimortal
28.09.2007, 18:04
cRiLaZ
если с LWP работаешь, то используй Crypt::SSLeay - удобная штука..
диджи забыл объяснить как ставить ssleay
ps трай ppm install http://theoryx5.uwinnipeg.ca/ppms/Crypt-SSLeay.ppd
если не покатит как у меня -- то пиши надобудет в ручную dll -ки скидывать =)
Digimortal
28.09.2007, 21:34
да у него, может, и не активперл даже стоит..
а писать каждый раз как юзать ppm не вижу смысла..
то, что этот модуль при установке на винду может удалить дллку из систем32 - так хз, может, поправили уже.. )
Кто-нибудь может подсказать код веб-шелла на перле для инъекции, как на пхп есть <?php system($_GET[cmd]); ?>
это если инклудить только в .cgi скрипт написанный на perl
тогда system("ls"); --
Подскажите плиз, как сделать что один и тот же сокет отправлял на порт1 и читал с порта2, возможно ли такое? Просто 2 сокета чтоб не создавать.
Digimortal
01.10.2007, 16:13
>> возможно ли такое?
невозможно..
если ты юзаешь use socket -- то возможно перехватывать подключение клиента к прослушиваемомму порту и потом отправка клиенту чего либо
если ты юзаешь use socket -- то возможно перехватывать подключение клиента к прослушиваемомму порту и потом отправка клиенту чего либо
Не понял. Это и так ясно, что можно отловить и послать ))
Просто такая проблема:
Серверу запрос отправляется на порт 2222 (например)
А ответ должен прийти на порт 3333.
Вот одним сокетом как так сделать?
C!klodoL
02.10.2007, 23:09
Ты пишешь клиент или сервер? Одним сокетом такое не сделать, сокет это ip:port и с двумя портами ты сокет не создашь и после создания порт тоже не поменяешь, и чем тебя смущает создание двух сокетов?
Весьма полезный топик для веб перловиков: http://community.livejournal.com/ru_perl/200658.html
если я правильно тебя понял то vladest не слушай этих дядек =) все можна делать.
Лучше всего на мой взгляд сделать это используя fork() где скажем родитель будет читать из сокета а дочерный будет писать в сокет.
ps: и обзаведись толковой литературой., а так же perlipc and perlfork
Digimortal
10.10.2007, 21:10
n4n0bit, сам ты дядько.. )
>> Лучше всего на мой взгляд сделать это используя fork() где скажем родитель будет читать из сокета а дочерный будет писать в сокет.
по-любому придется создать два сокета.. +)
Просто такая проблема:
Серверу запрос отправляется на порт 2222 (например)
А ответ должен прийти на порт 3333.
Вот одним сокетом как так сделать?
нужна два сокета!
=))
Вот есть скриптик
#!/usr/bin/perl
print "Content-type: text/html\n\n";
my $host = "89.108.80.80";
use Net::Ping;
$p = Net::Ping->new();
print "$host is alive.\n" if $p->ping($host);
$p->close();
Вот только он не чего не выводит... Библиотека Net::Ping установлена, выводит пустую стрницу и все... в чем может быть загвоздка?
Digimortal
12.10.2007, 16:37
Вот есть скриптик
#!/usr/bin/perl
print "Content-type: text/html\n\n";
my $host = "89.108.80.80";
use Net::Ping;
$p = Net::Ping->new();
print "$host is alive.\n" if $p->ping($host);
$p->close();
Вот только он не чего не выводит... Библиотека Net::Ping установлена, выводит пустую стрницу и все... в чем может быть загвоздка?
тут скорее всего загвоздка в твоем хосте.. по дефолту протокол для создаваемого object ping - tcp, на него хост видать не отвечает.. можно сделать например
$p = Net::Ping->new('icmp', 10);
но тогда потребуются рут-привилегии, чтоб скрипт рабтоал.. так же пробуй поизменять таймаут - по умолчанию он 5, но у меня, например, тока с 10 более-менее нормально работает..
При увеличения таймаута не чего не выдается... вообще не чего не выводиться...
Если бы не савмоде в пшп то можно было бы system и все дела...
Даю вообще забить на это...
Digimortal
12.10.2007, 17:27
так и на перл можно ведь "system и все дела"..
непонял, у тебя и "Content-type: text/html\n\n" не выводится? (так и не понял к чему это : ) )
дело в том, что у меня скрипт вполне нормально работет..
biophreak
15.10.2007, 18:12
Если не подходит Net::Ping;
то имхо можно чтонить в духе:
my $ping = `ping --args`;
print "$ping<br>\n";
гы про систем уже говорили жешь -- если кто не в курсе текст между `текст` выполняется через ком интерпритатор
Допустим дан массив с N кол-вом записей. Массив стринговый. Как узнать кол-во записей в массиве?
add:
Отобразить слово наоборот. Т.е. я ввожу test, он делает из этого tset. Есть ли специальная функция? А то свой алгоритм писать влом.
biophreak
16.10.2007, 10:28
Если правильно тебя понял, то scalar(@mas);
Digimortal
16.10.2007, 11:55
>> Есть ли специальная функция?
reverse
>> Есть ли специальная функция?
reverse
Уже нашёл до ответа. Но толку 0.
#!/usr/bin/perl
use strict;
my $var = $ARGV[0];
print reverse($var);
C:>perl.pl test
test
biophreak
16.10.2007, 12:21
Надо заменить
my $var = $ARGV[0];
на
my $var = "$ARGV[0]";
Надо заменить
my $var = $ARGV[0];
на
my $var = "$ARGV[0]";
#!/usr/bin/perl
use strict;
my $var = "$ARGV[0]";
print reverse($var);
C:>perl.pl privet
privet
:)
biophreak
16.10.2007, 12:43
Хм....странно, но еще страннее, если не
print reverse($var);
а
print reverse($var)."\n";
Тогда можно без кавычек брать аргв )
:)))
".\n" - сцуко:/
Всё работает:
#!/usr/bin/perl
use strict;
my $var = $ARGV[0];
print reverse($var)."\n";
biophreak
16.10.2007, 13:28
Угу...перл ваще штука странная :)))
Digimortal
16.10.2007, 13:33
нафлудили без меня тут.. )
"\n" тут, кстати говоря, абсолютно непричем..
вариант 1:
$a = reverse $ARGV[0];
print $a;
вариант 2:
print reverse split //, $ARGV[0];
вариант 3. наверно, самым правильным было бы написать так:
print scalar reverse $ARGV[0];
но можно и так, к примеру (вариант 4):
print eval reverse $ARGV[0];
+)
biophreak
16.10.2007, 13:42
Согласен, не причем :)
Но таки заработало-же...
Про кавычки для $argv[0] это ваще бред был
Пытаюсь написать простенький сервер))) Чтоб просто возвращал запрос в html обёртке. Проблема: не конектиться. И вообще ничего не print'ует.Может вечный цикл ему не по душе. :) Хотя компилируется. Бред. :confused: Подскажите
#!/usr/bin/perl -w
use IO::Socket;
my $sock = new IO::Socket::INET
(
PeerAddr => 127.0.0.1,
PeerPort => 8080,
Proto => 'tcp',
Listen => 1
) or die "$! fucking socket";
while(5==5)
{
$sock->listen();
print "<html>";
print "<head> <title>Server Answer</title> </head>";
print "<body>";
$acc = $sock->accept();
while(<$acc>)
{
print $_;
}
print "</body></html>";
}
это жесть чувак
perldoc IO::Socket
#!perl
use strict;
use warnings;
use IO::Socket;
my $sock = IO::Socket::INET -> new(LocalAddr => '127.0.0.1', LocalPort => 8080, Listen => 1) || die $!;
while(1)
{
next unless my $conn = $sock -> accept;
while($conn -> connected)
{
...
}
}
Вопрос: Допустим такую ситуацию:
my $var = '55.55';
my ($VR, $VRR) = split(/./,$var);
Следовательно у переменных $VR, $VRR значения == 55 . Но, в скрипте они имеют вид стринговых. Как мне перевести их в целочисленные?
Вычти из ни НОЛЬ.
Как я могу из них ноль вычесть если они стринговые? Ты прочитай внимательно вопрос.
Но, в скрипте они имеют вид стринговых
причем тут но?
а еще можешь умножить на 1=)
Просто попробуй то что тебе сказали...
Вот давайте вы все эти манипуляции сделаете с
#!/usr/bin/perl
use strict;
my $var = <STDIN>;
chomp(my ($VR, $VRR) = split(/./,$var));
А потом обсудим, ок?
$VR = $VR - 0;($VR = $VR *1;)
$VRR = VRR*1($VRR = VRR - 0;)
Вот мой пример:
где $str я могу ввести хоть "Привет)))";
echo"<br>Проверка ".$str;
echo"<br>".gettype($str);
$str = $str - 0;
echo"<br>".gettype($str);
Ты главное попробуй и все!
demonoid
18.10.2007, 11:21
2 [sL1p]
ИМХО красивей
#!/usr/bin/perl -w
use strict;
use warnings;
my( $var,$VR,$VRR ) = ( 55.55,undef,undef );
($VR,$VRR ) = split(/\./,$var);
printf "Sum : %d \n",$VR+$VRR;
Твой случай:
#!/usr/bin/perl
use strict;
my $var = <STDIN>;
chomp(my ($VR, $VRR) = split(/\./,$var));
printf "Sum : %d \n",$VR+$VRR;
Извиняюсь если неправильно понял, но если суммируем два числа значит они вещественного типа.
2 [sL1p]
ИМХО красивей
#!/usr/bin/perl -w
use strict;
use warnings;
my( $var,$VR,$VRR ) = ( 55.55,undef,undef );
($VR,$VRR ) = split(/\./,$var);
printf "Sum : %d \n",$VR+$VRR;
Твой случай:
#!/usr/bin/perl
use strict;
my $var = <STDIN>;
chomp(my ($VR, $VRR) = split(/\./,$var));
printf "Sum : %d \n",$VR+$VRR;
Извиняюсь если неправильно понял, но если суммируем два числа значит они вещественного типа.
Ну о красоте я буду думать после окончания написания кода(: Я понял в чём была ошибка:
split(/\./
Thx
Digimortal
18.10.2007, 15:07
>> Следовательно у переменных $vr, $vrr значения == 55 . Но, в скрипте они имеют вид стринговых. Как мне перевести их в целочисленные?
интерпретатор сам интерепретирует переменные в нужном контексте..
>> Мог бы ио поставить + (((
а лучше б минус за такие "советы"..
>> ИМХО красивей
красивей если 2 раза ворнингс заюзать и присваивать всем новым переменные undef, хотя они и так имеют значение undef? и у слипа вроде как через stdin передавалось, красивей чтоли явно в скрипте значение прописать?
В перле нет целочисленного типа данных. Есть скаляр, а это и стринги и инты.
Вот.
ЗЫ:
my($a, $b) = ('a', 1);
print $a++, $b++
Предположим у меня есть массив полученный из файла. Предположим есть 10 потоков. Как разбить этот массив на 10 частей и что бы каждый поток работал со своей частью?
Digimortal
18.10.2007, 19:42
>> Предположим у меня есть массив полученный из файла. Предположим есть 10 потоков. Как разбить этот массив на 10 частей и что бы каждый поток работал со своей частью?
можно что-нить типа этого замутить:
#!/usr/bin/perl -w
use strict;
my @a = 1..100; ## к примеру, поместим в массив числа от 1 до 100
push @a, undef; ## % )
my $num = 10; ## это - количество потоков
for (0..$num-1) {
print @a[$_*($#a/$num)..($_+1)*($#a/$num)-1], "\n";}
кста, иногда, лучше и не делить массив на равные части а работать с ним из каждого потока, например, извлекая из него элементы shift'ом..
demonoid
18.10.2007, 20:59
красивей чтоли явно в скрипте значение прописать?
явно не о том думал виноват, исправлюсь
Про присваивания думаю удобней пользоваться
Getopt::Std || $ARGV || shift
C!klodoL
19.10.2007, 13:10
Предположим у меня есть массив полученный из файла. Предположим есть 10 потоков. Как разбить этот массив на 10 частей и что бы каждый поток работал со своей частью?
на самом деле разбивать ничего не нужно, так же не следует читать весь файл в массив ибо размер его в оперативной памяти будет слишком большим, я когда пишу всякие бруты, наполняю массив паролями, затем потоки дергают из него пароли, когда массив опустеет, он снова заполняется паролями и потоки снова запускаются
пример-
#!/usr/bin/perl
use threads;
use threads::shared;
my @pass : shared; #расшариваем массив
$thr = 10;
open (pass, "<$dic");
Next:
@pass = pass(); #вызываем функцию наполнения массива пасами
#создаем потоки
for(0..$thr)
{
$trl[$_] = threads->create(\&Brut);
}
for(0..$thr)
{
$trl[$_]->join; #ждем пока они завершатся
}
sub Brut
{
while (@pass)
{
$pass = shift @pass;
# тут собственно сам брут #
}
}
goto Next;
#функция заполнения массива пасвордами фром the файлек
sub pass
{
my (@mas);
while (<pass>){
push @mas, $_;
last if (@mas > 300);
}
chomp @mas;
return @mas;
}
:mad: Господи куда все катется? народ вы что? новички елы палы...на вопросы от которых вы хотите получить ответ есть все в учебнике!!! Есть документация по перлу в ней все понятно описано! ТОка не спрашивайте меня как открыть документацию это убьет мой мозг! Тут был посто о библиотеки TK, в документации все показано как работать с кодировкой и с библиотекой в целом. Честно я не хочу не кого обидеть, но писать какие то программы которые складывают числа да еще на перл..это вообще жесть! Люди учити библиотеку LWP для работы непосредствено с WWW. Выучите что такое легурярные вырожения! Если кому надо я могу скинуть ссылку на форум программеров там на все даже детские вопросы есть ответ! Кароче народ это жесть, перл изучается за 48 часов...не считая библиотек! Эх..да что я говорю!
ну и нах ты это написал? Перл гуру что ле, пиздец
:) Вот это мне нравится такие ответы "Перл Гуру ты.." "Гы" "Гы2" :D просто нечего интересного и нормально для новичка я не увидел! Нах такую тему создовать если не кто не может дать нормальный свой ответ...только берут коды из статей и все такое! Елы палы если ТЫ да ТЫ юзер решил отпостить что нить для новичка то пиши полностью пример! Если спросил юзер как сделать кодирувку приведи ему полный пример а не то что написано на многих сайтах кароче эта темя на это форуме вообще не нужна и новичкам скажу бросайте этот раздел! вот вам нормальный форум тут вы на все получите полный ответ и даже если что вам приведут пример и прокамментируют код если не то другие! http://forum.vingrad.ru Так бросайте это раздел тут вы скажу вам на 100 процентов нечего не узнаите!
C!klodoL
26.10.2007, 22:28
Outlaw не нравится, не заходи и нечего тут флудить, такое впечатление что ты прочитал - освой перл самостоятельно за 24 часа, и радуешь что научился хеллоу ворлду, я посмотрю как ты на винграде задашь вопрос как написать какой нибудь брутер или типа того
хм...ода я изучил hello world и радуюсь! Ты думай что говоришь, может перл за 24 часа это твоя любимая книжка! На винграде можно задать любой вопрос...там были посты и посильней того что ты написал! Повторяю еще раз там можно получить на любой вопрос, ответ!!! Для тех кто не знает просьба не говорить! И где ты тут флуд увидел, тут как я понял раздел для новичков так вот я им и предлогаю хороший вариант по изучению перла и если есть вопросы где их лучше обсудить!
я не пойму чем ты недоволен -- тут что не ответили на какойто вопрос?? помойму ответы приходят в течении 15 минут -- и "я им и предлогаю хороший вариант по изучению перла" -- если ты пытаешься учить перл на форумах то это вообще пиндос -- книжки надо читать и практика практика и еще раз практика -- просмотр чужих скриптов и тд
ты стал писать как хеката-)
трудно внимательно прочитать пост человека?зачем тогда отвечать на его посты,если тебе влом их прочитатьи вникнуть в них.
а вопросы от которых вы хотите получить ответ есть все в учебнике!!! Есть документация по перлу в ней все понятно описано! ТОка не спрашивайте меня как открыть документацию это убьет мой мозг!
он по-русски написал что нужно пользоваться литературой(докум.),а судя по вопросам в теме этой литературой мало кто пользуется.(это его мнение-мое такое же,правда с той лишь разницей что мне пох-))))
скриптовые языки это конечно очень круто ,гы,че хочу то и творю,тут каждый гуру.
накуй ты ему -5 поставил?гы ну где он был неправ
Добавлено:
Spyder ну поставь сам себе минус
гы ну где он был неправ
1- реклама
2- оффтоп
3- безсмысленный пост
Я бы тоже поставил, но не могу =(
вот вам нормальный форум тут вы на все получите полный ответ и даже если что вам приведут пример и прокамментируют код если не то другие! http://forum.vingrad.ru
Не сравнивай это с Винградом. Запор с Мерседесом не принято сравнивать.
Дарова народ!
Кароч у мну идея зародилась.....замутить прокси чекер, тока вот не знаю суть этого чекера.....как он работает, может кто нють объяснит как он работает или мануал скиньте плз! сенк :cool:
1- реклама
2- оффтоп
3- безсмысленный пост
Ответ:
1 - Это не реклама это явная помощ новичкам, где если что они могу найти или спросить совета если тут такой не был дан, если тут их ответ чем то не устраивает они могут посмотреть на винграде!
2 и 3 - Где ты тут увидел оффтоп? И где тут безсмысленный пост? Я всего то попросил если даешь ответ новичкам то хотя бы комментируй так что бы было понятно новичкам среди них есть те кто в танке и т.д думаю потратить пару минут на коммент это не составит труда и новичкам будет понятно и тебе приятно! Дать нормальный чистый ответ это плюс автору за то что он понимает правила хорошего тона ;) Так что если подумать смысол есть!
P.s А на счет + да - мне как то все равно хоть вообще -100 будет от этого мне хуже не будет! :)
мне как то все равно хоть вообще -100 будет от этого мне хуже не будет!
великая штука автобан спасёт тебя
Дарова народ!
Кароч у мну идея зародилась.....замутить прокси чекер, тока вот не знаю суть этого чекера.....как он работает, может кто нють объяснит как он работает или мануал скиньте плз! сенк :cool:
IO::Socket =\
Самый простой:
#!usr/bin/perl
use IO::Socket;
use strict;
use warnings;
my $all = $ARGV[0];
my ($ip, $port) = split(/:/,$all);
my $sock = IO::Socket::INET -> new(PeerAddr => $ip, PeerPort => $port, Proto => 'tcp', Timeout => 10);
if($sock)
{
print "\nLive!\n";
}
else
{
print "\nDead\n";
}
Написал только что, работает. Если будет желание, сам разберёшься что да как работает. И сделаешь всё что надо. Это скелет.
Юзать:
script.pl ip:port
inv - я просто не понимаю нахера тут писать в теме что она галимая ваш форум гавно идите лудше на этот форум и ссылка ??? а чел помойму дурак - вот и все
насчет минуса - если еще такую лажу будет тут писать поставлю еще ибо не за просто так а по делу
Я с ним во многом согласен с той разницей что мне пох на ситуацию,он тут новенький и решил высказаться,поэтому он дурак?ЫЫЫ.Без ответа.
он дурак тк считает что тут никуя немогут ответить на норм вопрос -- хотя тут нормальных вопросов и не задают -- все что тут просили на все ответили -- причем с примерами -- я вообще нипонимаю к чему его гон что лудше идти кудато и вообще -- и хз с чем там соглашаться -- кстати почти все о чем спрашивают в топике можно найти в самом захолустном учебнике -- но приходится отвечать по мере сил тк некоторым легче спросить чем сидеть и искать
человек написал что тут задают или просто тупые вопросы или вопросы на которые уже даны ответы,причем долго искать не надо,ответы же тут дают вроде цитат из книжки,то есть вы просто книжку им заменяете-)и люди опять продолжают задавать свои вопросы .Эта тема мешает людям самим сесть и что-то изучить...
Гы так и есть
ну и где он не прав и почему он дурак я не пойму-)
единственная причина которую вижу я вот...
он написал что в этой теме дают херовые ответы,а так ты ,геном ,тут даешь ответы ,то принял как личное-)
Basurman
02.11.2007, 01:34
Есть строка 111.bbb.333.ccc.555.ddd.666.eee (любые символы, любое кол-во)
Кто знает, каким образом можно заменить (убрать) первые 4 вхождения . (точки)?
regexp? цикл? substr? чем проще - тем лучше...
То есть на выходе должно быть 111bbb333ccc555.ddd.666.eee и тд
Basurman может просто убрать 4, 8 и 12 символы?
Basurman
02.11.2007, 02:11
а если такая строка:
11111.bbbbb.22222.... ? не вариант )
в мозгу крутится что-то вроде
substr($str, index($str, '.')) =~ s/.//g;
но не более пока )
C!klodoL
02.11.2007, 02:13
решение убогойе, но рабочее
$str = '111.bbb.333.ccc.555.ddd.666.eee';
for (0..3){
$str =~ s/\.//;
}
print $str;
Basurman
05.11.2007, 02:06
еще несколько вопросов:
1. как perl относится к типу данных NULL?
в 2-х словах: имеем SQL Inj. Если в таблице 3 столбца со значениями например "1", "NULL" и "3", то достав их через get (lwp::useragent) и concat_ws(',', id1, id2, id3) получим всего лишь "1, 3", что не есть хорошо, т.к. кроме NULL возможно любое другое значение...
2. сколько символов максимум возвращает этот же метод get? У меня проблема с выводом более 256 символов (неточно, надо проверить, но близко к этому). Если меньше, то все замечательно проходит...
demonoid
05.11.2007, 11:01
Basurman
...
2. сколько символов максимум возвращает этот же метод get?...
perldoc LWP::UserAgent
CONSTRUCTOR METHODS
The following constructor methods are available:
$ua = LWP::UserAgent->new( %options )
This method constructs a new LWP::UserAgent object and returns it. Key/value pair arguments may be provided to set up the initial state. The following options correspond to attribute methods described below:
KEY DEFAULT
----------- --------------------
agent "libwww-perl/#.##"
from undef
conn_cache undef
cookie_jar undef
default_headers HTTP::Headers->new
max_size undef
max_redirect 7
$ua->max_size( $bytes )
Get/set the size limit for response content. The default is undef, which means that there is no limit.
If the returned response content is only partial, because the size limit was exceeded, then a "Client-Aborted" header will be added to the response.
The content might end up longer than max_size as we abort once appending a chunk of data makes the length exceed the limit.
The "Content-Length" header, if present, will indicate the length of the full content and will normally not be the same as length($res->content).
*undef - у переменной нет значения
Ответ:
метод get возвращает столько 'символов', сколько потребуется
если не объявлен UserAgent таким образом:
my $ua = LWP::UserAgent->new( max_size => ...)
1. как perl относится к типу данных NULL?
Такого типа данных нет
можно ли через php скрипт узнать данные о компьютере название например?
разделом ошибся чтоли? почему php? а так никто еще system() не отменял можно и ось и им компа с сети узнать и много чего еще
народ как правельно сделать подсчёт сколько компов в онлайне:
if (eregi ("1", $dati_mount[1], $out)) {$connesso="<img src=\"on.gif\">online";
global $a;
$a++;
echo " Сейчас в сети $a пользователей";}
мне выдаёт Сейчас в сети 1 пользователей Сейчас в сети 2 пользователей =)
а как написать правельно?
Iceangel_
17.11.2007, 11:12
есть скрипт, но в нем походу есть ошибки, потому что за место списка он выводит несколько раз первую строку из файла, а нужно чтобы все...
open(SITES,"sites.txt") ;
@server = <SITES>;
close(SITES);
for ($i=$#server; $i>=0; $i--){
print "forum $server[i] unvulnerable\r\n";
}
компилятор выводит 2 ошибки:
Unquoted string "i" may clash with future reserved word at poisk.pl line 6.
Argument "i" isn't numeric in array element at poisk.pl line 6.
demonoid
17.11.2007, 12:10
#!perl
use strict;
use warnings;
open(my $SITES,"sites.txt") ;
while( <$SITES> )
{
chomp;
print "$_ \n";
}
sites.txt
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
C:\>s.pl
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
Iceangel_
17.11.2007, 12:24
#!perl
use strict;
use warnings;
open(my $SITES,"sites.txt") ;
while( <$SITES> )
{
chomp;
print "$_ \n";
}
sites.txt
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
C:\>s.pl
192.168.0.1
192.168.0.2
192.168.0.3
192.168.0.4
Конечно спасибо...
Но этим способом мы уже реализовывали, мне нужно указать ошибки в моем коде...
demonoid
17.11.2007, 13:33
....
chomp( $server[$i] );
print "forum $server[$i] unvulnerable \n";
....
C:\>s.pl
forum 192.168.0.4 unvulnerable
forum 192.168.0.3 unvulnerable
forum 192.168.0.2 unvulnerable
forum 192.168.0.1 unvulnerable
Парни, проблема такая. Как можно в созданном файле, контента: uin;pass удалить дубликаты пар uin;pass? преобразовать массив к множеству?
Парни, проблема такая. Как можно в созданном файле, контента: uin;pass удалить дубликаты пар uin;pass? преобразовать массив к множеству?
Перл не знаю, но сделать это можно легко на пхп.
<?
$file = 'file.txt'; // файл с уинами
$file2 = 'file2.txt'; // файл с уинами без повторений
$array = explode( "\n", file_get_contents($file) );
$array = array_unique( $array );
$handle = fopen($file2, 'a');
fwrite($handle, implode("\n", $array));
fclose($handle);
?>
C!klodoL
17.11.2007, 18:44
Парни, проблема такая. Как можно в созданном файле, контента: uin;pass удалить дубликаты пар uin;pass? преобразовать массив к множеству?
удалить дубликаты:
open(incom, "<./in.txt");
@IN = <incom>;
@IN = grep{!$_{$_}++} @IN;
close(incom);
open(out, ">./out.txt");
print out @IN;
close(out);
удалить дубликаты:
open(incom, "<./in.txt");
@IN = <incom>;
@IN = grep{!$_{$_}++} @IN;
close(incom);
open(out, ">./out.txt");
print out @IN;
close(out);
@IN = grep{!$_{$_}++} @IN; всё дело в этом короч.. поянтно, спс..
biophreak
19.11.2007, 17:25
Возник вопросик небольшой...как можно определить эл-т хеша с наибольшим значением, не прибегая непосредственно к перебору?
Заранее спасибо...
ЗЫЖ Перебор не устраивает тем, что эл-тов может быть больше сотни...
как можно определить эл-т хеша с наибольшим значением
Ни как =\ Хотя хз может есть какаянить закономерность =\
а если заносить значение хеша в какую то переменную до занесения в сам хеш?
C!klodoL
19.11.2007, 23:24
на счёт функции не знаю, но даже если функция то она имхо устраивает такой же перебор, а вообще как данные попадают в хэш?
http://opennet.ru/docs/RUS/perl_hash/
на счёт функции не знаю, но даже если функция то она имхо устраивает такой же перебор, а вообще как данные попадают в хэш?
через оператор присваивания
Без перебора такое может быть возможно организовать через XS. И снова напишу может быть.
Digimortal
20.11.2007, 04:15
my %hash = (
'1' => '1234',
'2' => '666',
'3' => '9900',
'4' => '123'
);
print @{[ sort {$a<=>$b} values %hash ]}[-1]
sort перебирает массив, который возвращает values, внутри себя
Digimortal
21.11.2007, 02:55
>> sort перебирает массив, который возвращает values, внутри себя
угу, а есть иные способы?
кста, у меня такое ощущение, что он вообще про мд5-хеши ( http://forum.antichat.ru/thread53979.html ) спрашивал +)
угу, а есть иные способы?
имхо не исключено. посмотрю на досуге
Парни! Есть массив, состоящий из девяток (ну, 9*). Как из этого массива выбрать только xyz'ы ???
C!klodoL
23.11.2007, 00:21
ну чтение и запись в файл я думаю ты сам сможешь сделать
$osika = '438884348';
@IN = split(//, $osika);
@IN = grep{!$_{$_}++} @IN;
if (@IN < 4)
{
print $osika."\n";
}
constanta
26.11.2007, 02:21
Народ, подскажите пожалуйста... Есть база мыл - весит 100 мб (тхт) , есть фильтр весит 700 мб (тхт) . Как можно сделать так что бы из первого файла были удалены быстро и качественно совпадения по фильтру.А результат записан в другой какой то файл.
C!klodoL
26.11.2007, 03:18
что из себя представляет фильтр?
что из себя представляет фильтр?
Думаю просто список мыльников...
Фильтрация тут имхо сравнение - Т.е. если мыльник, из первого файла совпадает с мыльником из вторга файла, то его пропускают, если не совпадает пишем в файл... и. т.д.
constanta
26.11.2007, 17:03
Угу. Второй файл - просто список абузных мыл. Которых не должно быть в итоговом файле.
Есть такой сайт getfirelink.net отправляет файлы на почту. Так вот на этом сайте за ежедневное посещение сайта бесплатно добавляется 5Мб.
Собсна ниже приведен скрипт который при запуске должен заходить на сайт и ароходить авторизацию, но чет не работает, помогите пожалуйста исправить скрипт.
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Cookies;
$url = "http://getfirelink.net/";
$login = "";
$password = "";
$xpl = LWP::UserAgent->new() or die;
$cookie_jar = HTTP::Cookies->new();
$xpl->cookie_jar( $cookie_jar );
$res = $xpl->post($url.'index.php',
[
"user" => "$login",
"password" => "$password",
]);
$cookie_jar->extract_cookies($res);
$xpl->get($url.'cabinet/files/index.php');
demonoid
02.12.2007, 17:26
#!perl
use warnings;
use strict;
use LWP::UserAgent;
my ( $ua,$id,$pwd ) = ( LWP::UserAgent->new,"demonoid","JIAPOJIb" );
my $res = $ua->post( "http://getfirelink.net/index.php?user=".$id."&passwd=".$pwd."&submit_login=%D0%92%D0%BE%D0%B9%D1%82%D0%B8" );
# тут проверку сделай удалась авторизация или нет
# ...$res->as_string;
А можно довести скрипт до ума, а то я практически ни чего не понимаю в перле
Пыхпых Инъекцыч
02.12.2007, 18:55
Камрады! Не могу одолеть wordpress движок, перл начал изучать недавно.
Вот у меня написан скрипт логина в юзерскую админку вордпресса - всё работает.
#usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
#-- USER AGENT
my $user_agent = LWP::UserAgent->new;
$user_agent->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
$user_agent->cookie_jar( {} );
$user_agent->timeout(7);
$user_agent->default_headers->push_header(
'Accept-Charset' => 'iso-8859-1,*,utf-8'
);
$user_agent->default_headers->push_header(
'Accept' => 'text/xml,application/xml, application/xhtml+xml, text/html, text/plain, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*'
);
$user_agent->default_headers->push_header(
'Accept-Language' => 'en-US'
);
#-- BLOG DATA
my $url = "http://localhost/tst2/wp2/";
my $usr = "user1";
my $pwd = "qazwsx";
#-- LOGIN
my $req = HTTP::Request->new( POST => $url . 'wp-login.php' );
$req->content_type('application/x-www-form-urlencoded');
$req->content( sprintf('log=%s&pwd=%s&wp-submit=Login »&redirect_to=wp-admin/',$usr,$pwd) );
my $res = $user_agent->request( $req );
#-- USER WP-ADMIN
$req = HTTP::Request->new( GET => $url . 'wp-admin');
$req->content_type('application/x-www-form-urlencoded');
$res = $user_agent->request( $req );
print $res->as_string;
Далее, я бы хотел немного переделать скрипт.
В лисе с помощью расширения EDIT COOKIES я продляю срок действия вордпрессовских кукисов, в результате чего в мозилловском файле cookies.txt появляется следующая запись:
localhost FALSE /tst2/wp2/ FALSE 1227897800 wordpresspass_c7e1d058c6b9ded5cfeaa99ec2ae0c85 ef4ddf645aa223c0b2b1356fbb4fd90a
localhost FALSE /tst2/wp2/ FALSE 1227897800 wordpressuser_c7e1d058c6b9ded5cfeaa99ec2ae0c85 user1
Теперь, в следующий раз в браузере можно сразу попасть в админку вордпресса.
А вот скриптом не получается, редериктит на wp-login.php:
#usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
#-- USER AGENT
my $user_agent = LWP::UserAgent->new;
my $cookie_jar = HTTP::Cookies::Netscape->new( file=> 'firefox_cookies.txt', );
$user_agent->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7');
$user_agent->cookie_jar( $cookie_jar );
$user_agent->timeout(7);
$user_agent->default_headers->push_header(
'Accept-Charset' => 'iso-8859-1,*,utf-8'
);
$user_agent->default_headers->push_header(
'Accept' => 'text/xml,application/xml, application/xhtml+xml, text/html, text/plain, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png, */*'
);
$user_agent->default_headers->push_header(
'Accept-Language' => 'en-US'
);
#-- BLOG DATA
my $url = "http://localhost/tst2/wp2/";
#-- USER WP-ADMIN
my $req = HTTP::Request->new( GET => $url . 'wp-admin');
$req->content_type('application/x-www-form-urlencoded');
my $res = $user_agent->request( $req );
print $res->as_string;
Где вкралась ошибка?
Попробовал тоже самое с гуглом - подставил кукисы англоязычного профайла, чтоб редериктело сразу на англоязычную версию, а не на локальную - с гуглом работает.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot