what_me ([info]what_me) wrote,

Стилевое

Если в скрипте нужна дата в виде строки
my $TODAY = do { my @t = ( localtime() )[ 3 .. 5 ];
                 $t[1]++; $t[2] += 1900;
                 join '.', @t };


Update: Красивость из комментов от [info]sharifulin
my $TODAY = join '.', map {$_->[3], $_->[4]+1, $_->[5]+1900} [localtime];
Tags: perl

  • Post a new comment

    Error

    Your reply will be screened

  • 22 comments

[info]sharifulin

November 13 2009, 08:33:29 UTC 2 years ago

Ужас! :)

Вот моя функция:

sub time2iso(;$) {
	return sprintf "%4d-%02d-%02d %02d:%02d:%02d", $_->[5]+1900, $_->[4]+1, reverse @$_[0..3] for [localtime(shift||time)];
}

[info]sharifulin

November 13 2009, 08:39:16 UTC 2 years ago

То же самое можно через map, если inline :)

[info]what_me

November 13 2009, 08:53:26 UTC 2 years ago

Мне кажется, с map корявее получится. Покажи, как ты это видишь.

[info]sharifulin

November 13 2009, 11:27:27 UTC 2 years ago

my $TODAY = join '.', map { $_->[3], $_->[4]+1, $_->[5]+1900} [localtime];

По-моему, симпатичней :)

[info]what_me

November 13 2009, 11:33:32 UTC 2 years ago

да, отлично.

[info]pavel_kudinov

November 13 2009, 14:25:20 UTC 2 years ago

+1

[info]ru.ivan.fomichev.name

December 23 2009, 14:08:23 UTC 2 years ago

Прием интересный, применение отстой. Рекомендую использовать strftime. Подробнее написал тут: http://ru.ivan.fomichev.name/2009/12/inline-for.html

[info]what_me

November 13 2009, 08:51:35 UTC 2 years ago

Мне как раз хотелось обойтись без функции. Зачем она если вызывается только один раз?
Смысл в том, что внутри do{} форматируешь дату для конкретного случая с временными лексическими переменными.

[info]sharifulin

November 13 2009, 11:25:00 UTC 2 years ago

Я тебя понимаю, у меня долго не было функции, потом понял, что слишком часто дату форматирую.

[info]gerdlerin

November 13 2009, 10:38:40 UTC 2 years ago

А не лучше ли reverse @$_[0..3] заменить на @$_[3,2,1,0]? Это и короче и быстрее.

[info]sharifulin

November 13 2009, 11:23:31 UTC 2 years ago

Можно, просто мне нравится оператор ..
:)

[info]nponeccop

November 13 2009, 12:30:19 UTC 2 years ago

Это reimplementation of HTTP::Date::time2iso(), дабы не таскать за собой депенденси в виде libwww и ещё какого-то говна?

[info]sharifulin

November 17 2009, 06:19:03 UTC 2 years ago

да, мне вообще не нравится HTTP::Date :)

[info]ali_lj

November 13 2009, 14:45:23 UTC 2 years ago

Использовать Date::Format уже не кошерно? %))

[info]what_me

November 13 2009, 19:08:01 UTC 2 years ago

Ради чего? Ради одной строки сделать скрипт зависимым от модуля, не входящего в состав core modules?

[info]ali_lj

November 14 2009, 00:38:25 UTC 2 years ago

Вопрос подхода.

Выбор между

а) маленьким, быстрым и потенциально не портабельным и
б) удобным, расширяемым, но ресурсоемким

он всегда есть, это понятно.

[info]ksurent

November 13 2009, 18:39:06 UTC 2 years ago

Буэ. Меня всегда раздражали эти += 1900 и += 1...
Всегда стараюсь использовать отличный модуль Date::Calc:
use Date::Calc qw(Today Today_and_Now);
my $today = sprintf '%02i-%02i-%i', Today();
my $today_and_now = sprintf '%02i-%02i-%i %02:%02i:%02i', Today_and_Now();

[info]what_me

November 13 2009, 19:09:22 UTC 2 years ago

Модуль хороший, но не <a href="http://perldoc.perl.org/index-modules-D.html>core</a>

[info]rommeech

November 17 2009, 10:51:38 UTC 2 years ago

А я как лох делаю POSIX::strftime("%Y-%m-%d", localtime())

[info]ivan.fomichev.name

December 23 2009, 12:59:36 UTC 2 years ago

Единственный разумный пост.

[info]rommeech

December 23 2009, 15:28:29 UTC 2 years ago

Даже пэхэпешников забавляет этот пост.

[info]what_me

December 24 2009, 07:34:22 UTC 2 years ago

[info]what_me стоит несколько минут, потрясенный этой новой идеей и падает замертво. Его выносят.
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…