- 1
%words = map { $_ => $hash{$_} } grep { !proper($_) } keys %words;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
%words = map { $_ => $hash{$_} } grep { !proper($_) } keys %words;
Фильтрация хэша - удаление элементов, чьи ключи не удовлетворяют некому условию.
Конечно же использование православного for для Perl-истов ниже собственного достоинства.... :X
# (S) (рекурсивного вызова) Генерирует контент слота рекурсивного дерева (с плюсиками). Возвращает ('RecursiveSlot'=>$textbuf) или ()
sub PlusTreeSlot {
# (P) Путь к шаблону контентной ячейки
# (P) ghm
# (P) pid
# (P) treename
# (P) Уровень
# (P) функция
# (P) $ret
return () if !exists($_[1]->{$_[2]}); # Не вкладываем ничего в слот если там ничего нет
my $textbuf;
foreach (@{$_[1]->{$_[2]}}){
my $ret=&{$_[5]}($_,$_[4],ref($_[6])?dclone($_[6]):$_[6]) if $_[5];
$textbuf.=${tmpl_prepare($_[0],{
PlusTreeSlot($_[0],$_[1],$_->{'id'},$_[3],($_[4]+1),$_[5],$ret),
%{$_},
'trname'=>$_[3],
})};
};
return ('RecursiveSlot'=>$textbuf);
};
А вам тоже нравятся безымянные параметры?
А писать код без пробелов?
Кроме того, эта функция, вызывая себя рекурсивно, каждый раз заново открывает, читает, парсит и закрывает один и тот же файл шаблона.
my $sec;
my $min;
my $hour;
my $mday;
my $mon;
my $year;
my $wday;
my $yday;
my $isdst;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);
$year=$year+1900;
$mon=$mon+1;
if ($mon<10)
{
$mon='0'.$mon;
}
if ($sec<10)
{
$sec='0'.$sec;
}
if ($min<10)
{
$min='0'.$min;
}
if ($hour<10)
{
$hour='0'.$hour;
}
if ($mday<10)
{
$mday='0'.$mday;
}
двузначные цифры в дате
# куски кода выдернуты
# смотрите внимательно на SQL
#--- INSERT ------
my $comment_id = $ej->{dbh}->insert('blog.comments', (
'id::primary' => '',
'post_id::numeric' => $param_id,
'user_id::numeric' => $ej->{user}{id},
'text' => $newmess,
'time::numeric' => $ej->{time},
'rating_ball::numeric' => $rating_ball
));
my $_rating_ball = 0 + $ej->Query ('SELECT SUM(rating_ball) FROM blog.comments WHERE post_id = '.$param_id)->FetchRow;
$ej->Query(
'UPDATE blog.posts SET update_time = '.$ej->{time}.', rating_ball = '.$_rating_ball.', '.
'comments_ptr = CONCAT('.Q(pack('L', $comment_id)).', comments_ptr) WHERE id = '.$param_id
);
#--- DELETE ---
$ej->Query('DELETE FROM blog.comments WHERE id = '.$comment_id);
my $comments_ptr = pack('L*', $ej->Query('SELECT id FROM blog.comments WHERE post_id = '.$post_id.' ORDER BY time DESC')->FetchCol);
my $_rating_ball = 0 + $ej->Query ('SELECT SUM(rating_ball) FROM blog.comments WHERE post_id = '.$post_id)->FetchRow;
$ej->Query('UPDATE blog.posts SET comments_ptr = '.Q($comments_ptr).', rating_ball = '.$_rating_ball.' WHERE id = '.$post_id);
#--- SELECT ----
my %q = $ej->Query('SELECT user_id, topic_id, name, text, SUBSTRING(comments_ptr, '.(1+($page-1)*40).',40) AS ptr, round(length(comments_ptr) / 4) AS cnt, create_time, pics_ptr, rating_ball FROM blog.posts WHERE id = '.$param_id)->FetchHash;
my @id = (); my @user_id = (); my @text = (); my @time = ();
if ($q{ptr} ne '') {
my $r = $ej->Query('SELECT id, user_id, text, time FROM blog.comments WHERE id IN ('.join(',',unpack('L*', $q{ptr})).') ORDER BY time DESC');
@id = $r->FetchCol;
@user_id = $r->FetchCol(1);
@text = $r->FetchCol(2);
@time = $r->FetchCol(3);
}
# потом еще вывод через Ж
это работает на mySQL/PERL.
да зачем нам реляционная база, мы сами можем манипулировать отношениями.
comments_ptr это BLOB, c упакованным в него массивом int32 id'шников из comments.id
хотя и есть comments.post_id <=> posts.id
просто праздник какой-то!
sub count {scalar(@{[@_]})}
Из себя выдавил)
sub append {
my $appendstring = @_[0];
$returnstring = "$returnstring$appendstring";
}
Из плагина к nagios'у, который проверяет состояние интерфейсов на cisco-девайсах. http://svn.opsview.org/opsview/trunk/opsview-core/nagios-plugins/check_snmp_cisco_ifstatus .
sub title {
my ($str, $len) = @_;
while (1) {
last if substr($str, $len, 1) eq ' ';
++$len;
}
return substr($str, 0, $len) . "...";
}
аналог Index.
#!/usr/bin/perl
while ($colresults = $rez->fetchrow_hashref()) {
$hour = $colresults->{'TIME'};
if ($hour == '00') {$value0 = $colresults->{'VALUE_NUM'}};
if ($hour == '01') {$value1 = $colresults->{'VALUE_NUM'}};
if ($hour == '02') {$value2 = $colresults->{'VALUE_NUM'}};
if ($hour == '03') {$value3 = $colresults->{'VALUE_NUM'}};
if ($hour == '04') {$value4 = $colresults->{'VALUE_NUM'}};
if ($hour == '05') {$value5 = $colresults->{'VALUE_NUM'}};
if ($hour == '06') {$value6 = $colresults->{'VALUE_NUM'}};
if ($hour == '07') {$value7 = $colresults->{'VALUE_NUM'}};
if ($hour == '08') {$value8 = $colresults->{'VALUE_NUM'}};
if ($hour == '09') {$value9 = $colresults->{'VALUE_NUM'}};
if ($hour == '10') {$value10 = $colresults->{'VALUE_NUM'}};
if ($hour == '11') {$value11 = $colresults->{'VALUE_NUM'}};
if ($hour == '12') {$value12 = $colresults->{'VALUE_NUM'}};
if ($hour == '13') {$value13 = $colresults->{'VALUE_NUM'}};
if ($hour == '14') {$value14 = $colresults->{'VALUE_NUM'}};
if ($hour == '15') {$value15 = $colresults->{'VALUE_NUM'}};
if ($hour == '16') {$value16 = $colresults->{'VALUE_NUM'}};
if ($hour == '17') {$value17 = $colresults->{'VALUE_NUM'}};
if ($hour == '18') {$value18 = $colresults->{'VALUE_NUM'}};
if ($hour == '19') {$value19 = $colresults->{'VALUE_NUM'}};
if ($hour == '20') {$value20 = $colresults->{'VALUE_NUM'}};
if ($hour == '21') {$value21 = $colresults->{'VALUE_NUM'}};
if ($hour == '22') {$value22 = $colresults->{'VALUE_NUM'}};
if ($hour == '23') {$value23 = $colresults->{'VALUE_NUM'}};
if ($d_name ne $colresults->{'DNAME'}) {
unless ($first) {
push @result, {
N => $n_name,
C => $c_name,
D => $d_name,
TIME0 => get_temp($value0),
TIME1 => get_temp($value1),
TIME2 => get_temp($value2),
TIME3 => get_temp($value3),
TIME4 => get_temp($value4),
TIME5 => get_temp($value5),
TIME6 => get_temp($value6),
TIME7 => get_temp($value7),
TIME8 => get_temp($value8),
TIME9 => get_temp($value9),
TIME10 => get_temp($value10),
TIME11 => get_temp($value11),
TIME12 => get_temp($value12),
TIME13 => get_temp($value13),
TIME14 => get_temp($value14),
TIME15 => get_temp($value15),
TIME16 => get_temp($value16),
TIME17 => get_temp($value17),
TIME18 => get_temp($value18),
TIME19 => get_temp($value19),
TIME20 => get_temp($value20),
TIME21 => get_temp($value21),
TIME22 => get_temp($value22),
TIME23 => get_temp($value23),
};
$value0 = undef;
$value1 = undef;
$value2 = undef;
$value3 = undef;
$value4 = undef;
$value5 = undef;
$value6 = undef;
$value7 = undef;
$value8 = undef;
$value9 = undef;
$value10 = undef;
$value11 = undef;
$value12 = undef;
$value13 = undef;
$value14 = undef;
$value15 = undef;
$value16 = undef;
$value17 = undef;
$value18 = undef;
$value19 = undef;
$value20 = undef;
$value21 = undef;
$value22 = undef;
$value23 = undef;
}
...
}
}
.... # продолжение не менее захватывающее
Феерический код из одной не малоизвестной организации :)
$str=~/(.+?)<\/h2><p>(.+)/;
($d2,$str)=($1,$2);
($d2,undef)=split (/\,/,$d2);
($aday,$amn)=split (/ /,$d2);
if ($amn=~/^я/i) {$amon='01'}
elsif ($amn=~/^ф/i) {$amon='02'}
elsif ($amn=~/^мар/i) {$amon='03'}
elsif ($amn=~/^ап/i) {$amon='04'}
elsif ($amn=~/^мая/i) {$amon='05'}
elsif ($amn=~/^июн/i) {$amon='06'}
elsif ($amn=~/^июл/i) {$amon='07'}
elsif ($amn=~/^ав/i) {$amon='08'}
elsif ($amn=~/^с/i) {$amon='09'}
elsif ($amn=~/^о/i) {$amon='10'}
elsif ($amn=~/^н/i) {$amon='11'}
elsif ($amn=~/^д/i) {$amon='12'}
Ещё один фрагмент граббера. Славное определение месяца :)
# ВЫШЕ БУДЕТ МАСИВ С 1 до 7 за семь дней дабы делать выборку
for ($indx=0; $indx<7; $indx++) { ## каждый раз работаем с датой
@sql=();
my $bindings = 0;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time+$indx*86400); # а тут надо будет написать что умножить эл. масива на чтото
$date=($year+1900).'-'.($mon<9?'0':'').($mon+1).'-'.($mday<10?'0':'').$mday;
$url2=$url.$date;
#####$url2=$url;
$cinema=&get($url2);
...
} # это скобка массива
Вот такой фрагмент парсера. Комменты читать по 3-4 раза для полного впечатления