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

    −122

    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
    sub PrintToFile {
    	
    	my ($filename, @file) = @_;
    	
    	@file = sort {$a <=> $b} @file;
    	
    	open BK, ">backup.txt";
    	foreach $line(@file) {
    		print BK "$line";
    	}
    	close BK;
    	
    	rename "backup.txt", "$filename";
    	unlink "backup.txt";
    	
    }

    А вот так мы записываем в файл. И нас не интересует многопоточность или проверка имени файла (в вызывающей функции тоже нет). А не записать ли нам ../index.html?

    Прошу не кидаться калом. Первый раз вижу перл. Может быть так и надо? Волшебник-интерприатор все поправит, и не даст сучиться ужасному?

    ps взято с разломанного недображелателем хостинга, для того, чтобы "поправить все как следует".

    Запостил: da4ever, 09 Мая 2010

    Комментарии (7) RSS

    • ну временные имена файлов - это могут быть грабли. даже без многопоточности.

      отсутствие проверок (которые в перле так легко делать) на файл операциях вот это говно.

      похоже кто-то копипастил откудато. стиль не консистентный: my $file v. $line; { $a <=> $b } редундантно в сорте.

      и если верить имени переменной (@files) то в `print BK "$line"` не хватает "\n".
      Ответить
      • { $a <=> $b } ни фига не редунантно в сорте. { $a cmp $b } редунантно в сорте.
        А за говнокод поставил плюс, т.к. операция создания временного файла меня лично раздражает. Да и foreach нафиг не нужен - достаточно было бы
        print BK sort { $a <=> $b} @file;

        @file - неподходящее название для этой переменной.
        Ответить
    • > стиль не консистентный

      > редундантно

      ВНЕЗАПНО в русском языке есть слова "последовательный" и "избыточный"
      Ответить
    • Вот оказывается как бывает. Мне не понравилость то, что делает этот код и как он это делает. А оказывается тут еще и стиль отвратителен. Энивей отценка -4 какбыл говорит, что это не говнокод. Так?
      Ответить
      • Проверки нет - плохо.
        А то что делается временный файл, так автор видимо хотел очень быстро заменить
        файл другим содержанием (строка: rename "backup.txt", "$filename";)

        Так можно было бы блокировку на файл поставить и не париться. вот это было бы правильно.
        Вообщем, попахивает новичком.
        Воздержусь от голосования.
        Ответить
      • А что до стиля.
        В 8 строке my нету, то есть $line глобальная - плохо.
        Ответить
      • Сам код выглядит нормально, если не вдумываться. За это, наверно, и минусуют.
        Ответить

    Добавить комментарий