Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > написать в одну строку


Автор: gcc 1.4.2011, 00:09
есть код:
Код

($sec,$min,$hour,$mday,$mon,$year,$wday,
$yday,$isdst)=localtime(time);
printf "%4d-%02d-%02d %02d:%02d:%02d\n",$year+1900,$mon+1,$mday,$hour,$min,$sec;


мне нужно вывести только:
Код

printf "%4d-%02d-%02d"

2011-03-31


пробую написать, но не получатеся подставить $year+1900,$mon+1  в:

Код

#print keys %{ map { {$_->[0]=>1} } ([@{[localtime(time)]}[3..5]])x3 };
 
# print Dumper map $_,  { @{[localtime(time)]}[3..5] => @{[localtime(time)]}[3..5] }; 
 
 # print map $_, my $t = shift @{[localtime(time)] } ;

#print map { $_->[0] } map {  ([ ${[localtime(time)]}[$_]]) } 3..5
 

#print join "-", map {  ( @{[localtime(time)]}[3..5]) } qw(1900 1 0)
 
 
# map {  ( @{[localtime(time)]}[3..5]) } 0..3


# print map {@$_} (@{[localtime(time)]}[3..5])x3;

#print join "-", map $_, my $u = @{[localtime(time)]}[3..5]; print Dumper $u ; #qw(1900 1 0)



как написать в одну строку?

Автор: arto 1.4.2011, 06:52
sub { $_[5]+1900,$_[4]+1,$_[3] }->(localtime)

Автор: ming 1.4.2011, 12:22
Код

use POSIX 'strftime';
print strftime("%Y-%m-%d", localtime);

Автор: arto 1.4.2011, 13:00
# perlbloat POSIX
POSIX added  652k
#perl -MPOSIX=strftime -MBenchmark=timethese -e 'timethese ($ARGV[0], { A => sub { sprintf "%s-%s-%s", sub { $_[5]+1900,$_[4]+1,$_[3] }->(localtime) }, B => sub { strftime("%Y-%m-%d", localtime); } } )' 10000000
Benchmark: timing 10000000 iterations of A, B...
         A: 76 wallclock secs (52.32 usr + 24.36 sys = 76.68 CPU) @ 130412.10/s (n=10000000)
         B: 112 wallclock secs (55.45 usr + 56.47 sys = 111.92 CPU) @ 89349.54/s (n=10000000)
# 

Автор: ming 1.4.2011, 14:26
Цитата(arto @  1.4.2011,  17:00 Найти цитируемый пост)
 

интересно зачем же люди тогда придумали strftime? ведь он же МЕДЛЕННЫЙ!  smile 

Автор: gcc 1.4.2011, 14:30
arto, спасибо, работает!

ming, спасибо, мне нужно было узнать именно про конструкции perl, то как написать в данном случае...

Автор: arto 1.4.2011, 14:49
у него форматная строка хорошая:

# LC_ALL=ru_RU.utf8 perl -MPOSIX=strftime -le 'print strftime "%a: %A",localtime'
Птн: Пятница
# 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)