=()= / Говнокод #4591 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
sub write_cookie {
	my %params = @_;

	if ($params{'-expires'} =~ /\+(\d+)m/) {
		my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime($date + $1 * 60);

		$year += 1900;
		my @mos = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
		my @dys = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
		$mon  = $mos[$mon];
		$wday = $dys[$wday];

		$params{'-expires'} = sprintf("%s, %02i-%s-%04i %02i:%02i:%02i GMT", $wday, $mday, $mon, $year, $hour, $min, $sec);
	}

	$params{'-path'}    = " path=$params{'-path'};"       if $params{'-path'};
	$params{'-expires'} = " expires=$params{'-expires'};" if $params{'-expires'};

	"$params{'-name'}=$params{'-value'};$params{'-path'}$params{'-expires'}";
}

setcookie() Perl-вариант.

Запостил: Arigato Arigato, (Updated )

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

    • Впрочем, если это делать вручную, то не вижу здесь говна (массивы, спринтф)
      Ответить
      • форматирование стандартной даты через массивы месяцев и дней - тоже кошерно?
        Ответить
        • возьмём замечательную функцию POSIX::strtfime
          %b - это трёхбуквенное слово, обозначающее месяц.

          print strftime('%b', gmtime)
          у меня на винде вернулось... слово "ноя"
          ===
          Значит нормально.
          Ответить
          • POSIX::strftime - это вызов функции ОС, перл не причём.

            Хотя, может есть в перле функция, возвращая английский вариант всегда. Надо поискать.
            Ответить
        • да - если нужно портабельно дату по RFC822/RFC2822 генерить. что и делает выше приведеный код.
          Ответить
        • Сам код не говно.

          Но если в перле нет встроенной функции (или хотя бы в одном из поставляемых модулей), возвращающей названия месяцев и дней только в английском варианте, а не в локали, то это плохо
          Ответить
          • > Но если в перле нет встроенной функции (или хотя бы в одном из поставляемых модулей), возвращающей названия месяцев и дней только в английском варианте, а не в локали, то это плохо

            А, ну тогда понятно, почему такие костыли.
            Ответить
          • > Но если в перле нет встроенной функции (или хотя бы в одном из поставляемых модулей), возвращающей названия месяцев и дней только в английском варианте, а не в локали, то это плохо

            есть внешние модуля. но по определению: системная функция stftime() всегда работает в текущей локали. в Перле можно поставить локаль в "С" - но это не со всеми системами совместимо и так же имеет негативный эффект на производительность.

            но с другой стороны. дата должна быть не просто по англиски написана (и англиских локалей между прочим много) и не по ISO стандартам - а по RFC822/RFC2822. так что системные функции (== POSIX == ISO) по определению не катят.
            Ответить
  • Уважаемый striker, который раз голосую за код, а оценка не меняется.
    Вижу что она поменялась, только после перезагрузки страницы.
    Браузер Firefox 3.6.12. И в хроме тоже.
    Ответить
    • Пользуюсь хромом, все норм.
      По теме:
      Функция - велосипед, но на гавнокоде ей точно не место.
      Ответить
    • бывает, там же целых два запроса, чото залипло
      хуже когда коммент не постится
      Ответить
  • все перловики после 2000го года знают про модуль CGI)
    либо это его сырцы либо тут не обошлось без пхпшника)

    зы:
    >>$params{'-expires'}
    точно не сырцы
    и точно не без пхпшника)
    Ответить
    • > все перловики после 2000го года знают про модуль CGI)

      Видимо, после 2010 они начали про него забывать 🙂
      Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8