D:\>perl -e "($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);$year+=1900;$mon+=1; print \"$year/$mon\"" 2005/10 D:\>
WindowsMEには時刻表示機能がないの何でだろー。
D:\>perl -le "@D=localtime(time); $D[5]+=1900; $D[4]+=1; foreach (@D){print}" 41 49 22 30 10 2005 0 302 0 D:\>
覚えてしまえlocaltimeで渡される配列。さすれば、あーんなこともこーんな事も自由自在だったりする。
D:\>perl -e "@D=localtime(time); $D[5]+=1900; $D[4]+=1; print \"$D[5]/$D[4]/$D[3] $D[2]:$D[1]:$D[0]\"" 2005/10/30 22:52:34 D:\>
localtimeの引数を省略するとtimeを引数に取ったことと同じになるので、下のようにしても同じ。短さ追求ならこちらのほうがいいかな。
D:\>perl -e "@D=localtime; $D[5]+=1900; $D[4]+=1; print \"$D[5]/$D[4]/$D[3] $D[2]:$D[1]:$D[0]\"" 2005/10/30 22:52:34 D:\>
短さを追求してわかりやすさを捨てた結果。
D:\>perl -e "@D=localtime; print 1900+$D[5].\"/\".$D[4]++.\"/$D[3] $D[2]:$D[1]:$D[0]\"" 2005/9/30 23:44:59 D:\>
あんまり美しくはないけれど。というかやめたほうがいいかも。上よりも長いし、出力内容見にくいし。
D:\>perl -le "@D[0..5]=localtime(time); $D[5]+=1900; $D[4]+=1; $\"='/'; @D=reverse @D; print \"@D[0..5]\";" 2005/10/30/23/7/1 D:\>
遊んでみるとこうなる。1秒ごとに時間を出力。意味はない。
D:\>perl -le "while(1){@D=localtime; print 1900+$D[5].\"/\".$D[4]++.\"/$D[3] $D[2]:$D[1]:$D[0]\"; sleep(1);}" 2005/9/31 0:3:28 2005/9/31 0:3:28 2005/9/31 0:3:29 2005/9/31 0:3:30 2005/9/31 0:3:31 2005/9/31 0:3:33 2005/9/31 0:3:33 2005/9/31 0:3:34 Terminating on signal SIGINT(2) D:\>
おばかな応用として、ラーメンタイマー改にしてみる。
D:\>perl -le "for(1..6){@D=localtime; print 1900+$D[5].\"/\".$D[4]++.\"/$D[3] $D[2]:$D[1]:$D[0]\a\"; sleep(30);} print\"\a\a\a\";" 2005/9/31 0:9:17 2005/9/31 0:9:47 2005/9/31 0:10:17 2005/9/31 0:10:47 2005/9/31 0:11:17 2005/9/31 0:11:47 D:\>
localtimeを文字列で評価すると人間にもわかる(つまり何時何分何秒)という形式で表示される。
$file_inf=localtime((stat($file))[9]);