| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > localtime |
| Автор: Agares 30.9.2008, 14:28 | ||
Использую так:
выдает не правильную дату (310008, хотя должна выдавать 300908) где моя ошибка? |
| Автор: ginnie 30.9.2008, 14:31 | ||||||
Уважаемый Agares, использую так
Выдает
Где моя ошибка? P.S.
выдает 2130, т.к. у операторов + и . одинаковый приоритет и они выполняются последовательно слева направо. |
| Автор: amg 30.9.2008, 14:52 | ||
А почему не так, как предлагают в документации?
|
| Автор: ginnie 30.9.2008, 14:55 |
| amg, это кто такое ($year+1900)%100 в документации предлагает? |
| Автор: amg 30.9.2008, 15:03 | ||
Там есть строки
|
| Автор: KSURi 30.9.2008, 15:05 |
| UPD: сори, не так понял вопрос |
| Автор: ginnie 30.9.2008, 15:11 |
| amg, в документации это написано последовательно (по тексту), но не означает, что так и надо писать (все вместе) ($year+1900)%100 от $year % 100 отличается только лишним сложением, электроэнергию надо экономить |
| Автор: ginnie 30.9.2008, 16:51 | ||||
Кстати, по поводу основного вопроса, рекомендовал другим модуль B::Deparse, а сам не пользуюсь
дает
|
| Автор: KSURi 30.9.2008, 18:20 |
| ginnie, так ведь выше сами написали, что у . и + одинаковый приоритет. |
| Автор: ramus 30.9.2008, 22:10 | ||
| Кстати, насчет электричества пользуюсь гдето подсмотренным вариантом, использующим только один системный вызов функции localtime почему то мне кажется что так нагрузка на сервер будет меньше $s = sprintf "%4d/%02d/%02d %02d:%02d:%02d: prg_name(perl): Begin work\n", sub{($_[5]+1900, $_[4]+1, $_[3], $_[2], $_[1], $_[0])}->(localtime); это как рабочий пример, естественно без sprintf электроэнергии еще меньше тратится правда она тогда в тепло выделяется :( еще примеры (зато работают
|
| Автор: ginnie 1.10.2008, 00:47 | ||||
ramus, за такое
надо на кол и премию вручать, посмертно Как только не изголяются программисты, чтобы написать все в одну строку! Завтра сравним по производительности с моим любимым вариантом
Что-то мне подсказывает, что мой вариант... |
| Автор: rcdimon 1.10.2008, 10:59 | ||
Я ваще вот так деаю всегда
|
| Автор: ginnie 1.10.2008, 11:43 | ||||||
Провел тестирование двух вариантов, разница в производительности практически отсутствует.
результаты такие:
|
| Автор: arto 1.10.2008, 13:08 |
| # perl -MBenchmark -e 'sub A () { my @a = localtime; return ( @a[0..3],$a[4]+1,$a[5]+1900 } sub B () { return sub { @_[0..3],$_[4]+1,$_[5]+1900 }->(localtime) } timethese ($ARGV[0],{ A => \&A,B => \&B )' 10000000 Benchmark: timing 10000000 iterations of A, B... A: 143 wallclock secs (75.38 usr + 58.65 sys = 134.03 CPU) @ 74610.16/s (n=10000000) B: 125 wallclock secs (63.99 usr + 58.12 sys = 122.11 CPU) @ 81893.37/s (n=10000000) # print -f "%.2f%%\\n" $[(81893.37-74610.16)/74610.16*100] 9.76% # |
| Автор: amg 1.10.2008, 13:34 | ||||||
Понял я наконец, откуда мог взяться такой синтаксис (localtime->mday etc.).
|
| Автор: ginnie 1.10.2008, 15:04 | ||||||||
arto, тест со sprintf() дает другие результаты:
но это не принципиально пока тестировал, обнаружил вот что
Сильно удивила функция C() |
| Автор: KSURi 1.10.2008, 15:20 | ||||
Значит мой первый пост в теме был все-таки нормальным) Как раз написал
|
| Автор: ramus 1.10.2008, 19:52 | ||||||
| Какое бурное обсуждение Спасибо ginnie за сравнение производительности
Я тоже так писал раньше, но потом отказался. Вначале моего освоения модулей perl, при использовании такой конструкции в модуле, функция localtime упорно возвращала значение НЕ в списковом контексте. Победил только так
Но мне это не понравилось своей не универсальностью и я стараюсь не использовать сомнительные конструкции. Хотя она рекомендуется в мануале... |