[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.6741 Reply
File: 1278449659485.jpg
Jpg, 40.13 KB, 800×600 - Click the image to expand
edit Find source with google Find source with iqdb
1278449659485.jpg
Суп перлач!
Сегодня мне взбрело в голову начать изучение perl.
Чтобы лучше запомнилось- пишу тренировочный скрипт. Столкнулся с проблемой на участке кода:

chomp(my @page = curl $ARGV[0]);
foreach my $line (@page) {
if ($line =~ m!\<a href="/src/!) {print $&"\n";}
в последней строке проводится ожидаемое действие по вычленению из текста участков, совпадающих с регуляркой (кусок А). Но как мне заменить часть "куска А" на другой "кусок Б"? К примеру, хочу заменить "href" на "DICK", после чего передать измененный участок "<a DICK="/src/" дальше для обработки.
Помогай, анончик, с меня лоли!

твой начинающий перлобыдлокодер
>> No.6742 Reply
>>6741
s/href/DICK/ чтоле?
> 16 December 2010
> Сегодня мне взбрело в голову начать изучение perl.
Ты пизданулся.
>> No.6743 Reply
>>6742
> s/href/DICK/ чтоле?
Ну да, но как его правильно вставить в код выше?
> Ты пизданулся.
И что?

В последней строке я упустил запятую c пробелом.
if ($line =~ m!\<a href="/src/!) {print $&", \n";} fixed
>> No.6744 Reply
>>6743
Я не помню уже, вроде бы точно так же: $line =~ s/foo/bar/
>> No.6747 Reply
Анон, у меня получилось, и работает такой код:
    chomp(my @page = `curl $ARGV[0]`);
    foreach my $line (@page) {
        if ($line =~ m#Файл: \<a href="/src/\w{3,4}/\S+\.\w{3,4}#) {
          my $url = $&;
          $url =~ s#Файл: \<a href="#http://dobrochan.ru#g;
          print "$url", "\n";
          }
Вот только сдается мне, что он слишком корявый. Поправьте, пожалуйста, вырвиглазные места.

Алсо, этот кусок выдает список линков на все файлы в треде с доброчана, может, кому пригодится.
>> No.6752 Reply
>>6747
wget --timestamping -r --level=1 -I '/src/jpg' -X '/thumb' "http://dobrochan.ru/s/res/6741.xhtml"
>> No.6755 Reply
File: 1292573688240.png
Png, 1.20 KB, 300×20 - Click the image to expand
edit Find source with google Find source with iqdb
1292573688240.png
>>6752
Есть два нюанса:
1. Хочется изучить perl.
2. Приведенный пример на перле получает список файлов любого типа в треде, а не только "jpg".

Но за приведенный пример с wget спасибо, анон, я не знал, что он так умеет.

В продолжение темы с оптимизацией куска на перле, сократил код на так:

foreach my $line (my @page = curl $ARGV[0]) {
if ($line =~ m#Файл: \<a href="/src/\w{3,4}/\S+\.\w{3,4}#) {
   my $url = $&;
   $url =~ s#Файл: \<a href="#http://dobrochan.ru#g;
   system("wget --no-proxy $url");
}

}

Но кусок "my $url = $&;" смотрится диким костылем. Как можно от него избавиться?
>> No.6756 Reply
>>6747
while(<chomp(my @page = `curl $ARGV[0]`)>){
    print 'http://dobrochan.ru'.$1."\n"; if #Файл: \<a href="(/src/\w{3,4}/\S+\.\w{3,4})#;
}        
Как-то так. Я давно не писал, если постусловие неправильно сработает, то предусловие должно.
$& это плохо примерно так же как $` и $'.
Да, мне не очень нравится твой регэксп. \S+, по моему, не особо подходит.
>> No.6757 Reply
>>6756
Да, еще, я бы не курлом качал, а use LWP::Simple какой-нибудь.
>> No.6758 Reply
Во избежание проблем с блокированием доступа, таки рекомендуется использовать API если уж очень хочется писать скрипты к доброчану.
http://dobrochan.ru/s/res/6741.json и ничего не надо парсить.
>> No.6759 Reply
>>6756
И еще, chomp-то тебе здесь зачем? Все равно потом кусок строки выдергиваешь, можно выкинуть.
>> No.6760 Reply
>>6758
Как раз таки надо. Есть жсон модули, которые парсят, но можно и свой парсер-костыль на основе писать, все-таки JSON слишком большой и перегруженный, если использовать для простых вещей.
>> No.6761 Reply
File: 0075.jpg
Jpg, 96.03 KB, 640×480 - Click the image to expand
edit Find source with google Find source with iqdb
0075.jpg
>>6756
Очень хорошо выглядит этот кусок, но Perl 5.10 не выполняет его, ругается на синтаксис во второй строке. Что именно ему не нравится я понять пока что не могу: маленький еще.

>>6758
> Во избежание проблем с блокированием доступа, таки рекомендуется использовать API если уж очень хочется писать скрипты к доброчану.
Про .json я и не знал, спасибо, покурю. А насчет скриптов для доброчана- я и не думал ничего такого писать, просто изучаю perl и по ходу делаю себе скрипт, который позволит из тредов разных борд содержимое вытягивать. Доброчан в их числе.

ОП
>> No.6763 Reply
>>6761
Скорее всего # ему не нравится, сделай / и бекслеши поставь в нужных местах.
> просто изучаю perl и по ходу делаю себе скрипт, который позволит из тредов разных борд содержимое вытягивать
Напиши данбуру-качалку же. Это стандартная задача, причем очень перловая. Можешь мою доделать, а то я забросил.
>> No.6770 Reply
>>6763
> Скорее всего # ему не нравится, сделай / и бекслеши поставь в нужных местах.
Нет, пробовал разные разделители, упрощал регексп, не помогает. Продолжу читать умные книжки, авось, догадаюсь, в чем дело.
Алсо, сейчас читаю "Изучаем Perl, 5-е издание; Рэндал Л. Шварц, Том Феникс и брайан д фой" как книжка, годная?
> Напиши данбуру-качалку же. Это стандартная задача, причем очень перловая. Можешь мою доделать, а то я забросил.
Это оно? http://410chan.ru/dev/res/773+50.html
>> No.6773 Reply
>>6770
> Lama book
> годная?
Лол, ты еще спрашиваешь? После нее нужно Programming Perl и в комплекте Perl Cookbook можно полистать.
Если не о стандартных рассуждать, то еще "Разработка сетевых программ на Perl" Штайна неплохая, я с нее начинал. Но все-таки, перл, кончено, хорошо, отличный язык, но сейчас уже совсем не то время, его уже неудобно применять везде, круг задач сузился до того, для чего он и разрабатывался - обработка текстовых данных.
> Это оно
Да, там где-то в треде и ссылки на гуглекод есть.

Да, в >>6756 лишняя ; после "\n". Соответственно if обрабатывается как предусловие, а ему нужны скобки. Вот твоя ошибка.
>> No.6775 Reply
>>6773
<Да, в >>6756 лишняя ; после "\n". Соответственно if обрабатывается как предусловие, а ему нужны скобки. Вот твоя ошибка.
Этот момент я тоже практически сразу пронюхал. Если убрать ";", один хрен не работает конструкция.
> Да, там где-то в треде и ссылки на гуглекод есть.
Если я правильно понял, эта утилита может качать пикчи по заданным тегам с заранее заданных ресурсов. Мне надо не это, а немного другое, так что пока воздержусь.
>> No.6776 Reply
>>6775
Ты предусловие пробовал?
> с заранее заданных ресурсов
Ну не совсем заранее заданных, оно идет по адресу из параметра и пытается определить вид апи и предоставляемые возможности, парсит получаемые документы(xml или json), вытаскивает из них теги, урл, разную информацию, и только потом качает.
>> No.6777 Reply
>>6776
> Ты предусловие пробовал?
Не совсем понимаю, о чем речь. Думаю, мне надо сперва книжек начитаться.
Anyway, спасибо за интересное инфо в треде всем.
>> No.6787 Reply
>>6777
if( предусловие ){
    код;
}
код if постусловие;


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]