1. Perl / Говнокод #2673

    −2.6

    1. 1
    %words = map { $_ => $hash{$_} } grep { !proper($_) } keys %words;

    Фильтрация хэша - удаление элементов, чьи ключи не удовлетворяют некому условию.
    Конечно же использование православного for для Perl-истов ниже собственного достоинства.... :X

    Запостил: Balza, 25 Февраля 2010

    Комментарии (5)
  2. Perl / Говнокод #2668

    +5.7

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    # (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);
    };

    А вам тоже нравятся безымянные параметры?
    А писать код без пробелов?
    Кроме того, эта функция, вызывая себя рекурсивно, каждый раз заново открывает, читает, парсит и закрывает один и тот же файл шаблона.

    Запостил: ichesnokov, 25 Февраля 2010

    Комментарии (3)
  3. Perl / Говнокод #2666

    +4.8

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    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;
    }

    двузначные цифры в дате

    Запостил: Bracus, 25 Февраля 2010

    Комментарии (7)
  4. Perl / Говнокод #2562

    +1.8

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    # куски кода выдернуты
    #  смотрите внимательно на 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

    просто праздник какой-то!

    Запостил: bmp20, 07 Февраля 2010

    Комментарии (1)
  5. Perl / Говнокод #2476

    +2.1

    1. 1
    sub count {scalar(@{[@_]})}

    Из себя выдавил)

    Запостил: RolCom, 23 Января 2010

    Комментарии (12)
  6. Perl / Говнокод #2457

    +1.4

    1. 1
    2. 2
    3. 3
    4. 4
    sub append {
        my $appendstring = @_[0];
        $returnstring = "$returnstring$appendstring";
    }

    Из плагина к nagios'у, который проверяет состояние интерфейсов на cisco-девайсах. http://svn.opsview.org/opsview/trunk/opsview-core/nagios-plugins/check_snmp_cisco_ifstatus .

    Запостил: aag, 20 Января 2010

    Комментарии (14)
  7. Perl / Говнокод #2418

    −0.7

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    sub title {
        my ($str, $len) = @_;
    
        while (1) {
            last if substr($str, $len, 1) eq ' ';
            ++$len;
        }
    
        return substr($str, 0, $len) . "...";
    }

    аналог Index.

    Запостил: klem4, 15 Января 2010

    Комментарии (5)
  8. Perl / Говнокод #2334

    +5.5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    #!/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;
    		}
    		
    		...
    	}
    
    }
    .... # продолжение не менее захватывающее

    Феерический код из одной не малоизвестной организации :)

    Запостил: SoulSeeker, 25 Декабря 2009

    Комментарии (6)
  9. Perl / Говнокод #2309

    +5.5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    $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'}

    Ещё один фрагмент граббера. Славное определение месяца :)

    Запостил: Suor, 22 Декабря 2009

    Комментарии (6)
  10. Perl / Говнокод #2307

    +0.4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    # ВЫШЕ БУДЕТ МАСИВ С 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 раза для полного впечатления

    Запостил: Suor, 22 Декабря 2009

    Комментарии (2)