kouprianov: (Default)
[personal profile] kouprianov

Это снова не то, что мне нужно, но оно работает. За несколько минут намолотило полторы тысячи URL и сложило их неопрятной грудой в один файл. Будем двигаться дальше навстречу доброму волшебнику [livejournal.com profile] ishc...

open (INPUT, '<urls.txt') or die $!;
my @urls;
@urls = <INPUT>;
close INPUT;

my $url;

open (TABS, '>>tabs.txt') or die $!;
foreach $url (@urls){
	{my $tab = get("$url");
	print TABS $tab;
	}
}
close (TABS);

Теперь надо заглубиться в регулярные выражения. Тут у меня тоже была пара успехов, но до того, что нужно, еще далековато. Почему-то заменять один паттерн (даже вариабельный) на другой у меня получается, а вот запихивать выловленный в переменную -- нет. Чего-то я снова не понимаю простенького...

Date: 2012-01-08 01:22 am (UTC)
From: [identity profile] anatol-olegych.livejournal.com
/pattern/; matches;

/(pattern1)(pattern2)/; puts found patterns into variables $1, $2, ....

Date: 2012-01-08 01:24 am (UTC)
From: [identity profile] kouprianov.livejournal.com
Верю. Но у меня почему-то пока что-то на этом пути не выходит.

Date: 2012-01-08 10:09 am (UTC)
From: (Anonymous)
Частая ошибка - пишут
$a = /(pattern)/;

Надо обязательно
($a) = /(pattern)/;

Date: 2012-01-08 08:00 pm (UTC)
From: [identity profile] kouprianov.livejournal.com
Спасибо, я попробую.

Date: 2012-01-08 04:22 am (UTC)
From: [identity profile] anatol-olegych.livejournal.com
@urls = <input ... >; прочитает одну строку, не?

Date: 2012-01-08 07:20 pm (UTC)
From: [identity profile] kouprianov.livejournal.com
Не, он (у меня, по крайней мере) читает каждую строку в отдельный $каляр данного м@ссива.

Date: 2012-01-08 08:51 am (UTC)
From: (Anonymous)
В строчках open и close не нужно ставить скобки. Переменную цикла лучше делать локальной для цикла: foreach my $url (@urls) ̣̣ и вообще цикл нечитабельный какой-то
почему бы не так: print TAB get($_) foreach (@urls) ; Не говоря уж о том, что массив @urls не нужон
print TABS get($_) while (<input ... >) ;

Перл язык сам по себе, не следует в него калькировать идиомы из других языков, получается очень коряво, за это почему-то именно перл и ругают

Date: 2012-01-08 08:29 pm (UTC)
From: [identity profile] kouprianov.livejournal.com
Единственный язык, идиомы которого могли попасть в мою версию перла, это русский устный. За несколько дней безуспешных попыток написать хотя бы один работающий скрипт, делающий что-то, кроме "hello world!", мой внутренний монолог состоял из отборного мата чуть более, чем полностью. Мой опыт программирования ограничивается фортраном и бейсиком тех времен, когда я учился в школе, а компьютеры общались с нами при помощи печатной машинки "Роботрон" и кассет для кассетного магнитофона. Не помню ничего, кроме отдельных операторов и того, что в бейсике надо было нумеровать строки.

Профессионал, возможно, вообще подошел бы к проблеме иначе. Вот, например, так: http://ishc.livejournal.com/170129.html

Я увидел и выпал в осадок, хотя потом он все разжевал: http://ishc.livejournal.com/170278.html и сказал, что эта древняя магия называется sed.

Date: 2012-01-30 09:49 pm (UTC)
From: (Anonymous)
Так о том и речь --- не нужно в перл тащить идиомы из мутно припоминаемых языков (особенно таких уёбищных как бейсик с фортраном). Он как раз и заточен на "устный" (английский, конечно, не русский -- увы :) Та же обработка ошибок например --- open FILE, "<", "$path" or die "fucking file $path"; --- прямо и переводится дословно "открой файл или сдохни". И посфиксные циклы с условными операторами print "oops" if ля-ля-ля; --- напечатай ежели ляля. И т.д.

А всякую херню типа этой sed-овской программы можно и на перле писать, только зачем? Программы типа пишут чтоб людям понятно было, а не роботам.

Date: 2012-01-30 10:19 pm (UTC)
From: [identity profile] kouprianov.livejournal.com
Не, я их вообще не помню, честно говоря ) У меня все идиомы -- кальки из тех учебников и справочников по perl'у, которые читал в момент судорожного написания программ. Так что все матюги -- их бедным аффтарам. Когда-нибудь я оценю все изящество perla и его близость разговорному английскому, но не сейчас, пока пытаюсь побыстрее налепить что-то работающее из готовых чужих или проверенных экспериментально своих блоков.

Date: 2012-01-08 02:55 pm (UTC)
From: [identity profile] vlkamov.livejournal.com
Общее впечатление - "машину ведет ас". Так будет писать перловый гуру, который хорошо знает тонкости работы операторов и функций, хорошо помнит какие переменные глобальные, а какие локальные. И проект - массивный многовариантный срипт, который будет крутиться месяцами на сотнях и тысячах виртуальных серверов.

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

Например, какая экономия памяти достигается вот этим
my $url;
?

А это
@urls = <INPUT>;
весьма нетривиальная конструкция, которая в разных Perl'ах не исключено, что может сработать по разному,
например поместить в $url[0] количество строк.

Поэтому у вас и возникли трудности.

Регулярные выражения - это довольно самостоятельный субязык, заимствованный из UNIX. Конечно,он позволяет записывать очень малым количеством кода весьма нетривальные действия, что позволяет экономить сотни миллисекунд ...
Не углубляйтесь.





Date: 2012-01-08 07:18 pm (UTC)
From: [identity profile] kouprianov.livejournal.com
На самом деле, все эти танцы с бубном были только для того, чтобы разжалобить великого и ужасного ishc, который изрек в ответ одно златое слово: http://ishc.livejournal.com/170129.html

Признаться, о таких вещах, как миллисекунды и прочее я вообще не думаю, потому что (1) не программист, (2) perl начал осваивать примерно неделю назад и теперь, вероятно, на неопределенное время заброшу (поскольку изучал я его пока только с оной целью, которая, наконец, достигнута), хотя некоторые эффекты меня поразили.

March 2025

S M T W T F S
      1
2345678
910 1112131415
16171819202122
23242526272829
3031     

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 22nd, 2026 05:46 pm
Powered by Dreamwidth Studios