perl 日記

perl はほとんど使ったことがありません。というかプログラミングしません。いや、これからするのです。
既にあるスクリプトとかプログラムをいじったりするのはよくやるんですけど、いちから書いたことはありません。
というわけで勝手に講座聴講開始。

スクリプトを実行することで、現在の日付を返すスクリプト
必要な知識は
print
time


#!/perl/usr/bin
と書いてあるのを見て「きよへろさんの環境ってかわってるんだなぁ」と思ったことはさておき、やってみました。
はじめてゼロから書いた perl スクリプトです。

#!/usr/bin/perl
use strict;
use warnings;

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $jpwday;

if ($wday == 0) {$jpwday = "日";}
elsif ($wday == 1) {$jpwday = "月";}
elsif ($wday == 2) {$jpwday = "火";}
elsif ($wday == 3) {$jpwday = "水";}
elsif ($wday == 4) {$jpwday = "木";}
elsif ($wday == 5) {$jpwday = "金";}
elsif ($wday == 6) {$jpwday = "土";}

print $year+1900,"年", $mon+1,"月", $mday,"日", $jpwday,"曜日", $hour,"時", $min,"分", $sec,"秒\n";


> perl date.pl
2005年10月31日月曜日2時4分6秒
おお動いた!
参考にしたのは

です。
localime() の他には gmtime() があって、こっちのほうは

PerlライブラリモジュールTime::Localにはtimegmサブルーチンが用意されていて、gmtimeの逆変換が可能です。

ということを知る。へぇ。
if は授業で VB をやったときにちょろっと教わったのをふと思い出したので、試みに elseif とか書いてみたらエラーが出ました。
ぐぐってみると VB とちがって elsif だとことがわかったので修正したらうまくいきました。
以下メモ。

  • time は UTC で 1970年1月1日 00:00:00 からの秒数
  • localtime は time が返す値をもらって 9 要素の配列にしてくれる
    • $sec 秒 0〜60
    • $min 分 0〜59
    • $hour 時 0〜23
    • $mday 日 1〜31
    • $mon 月 0〜11(1月は0)
    • $year 年 1〜138(西暦が欲しいとは1900を足す)
    • $wday 曜日 0〜6(日曜日は0)
    • $yday 年初からの経過日数 0〜365
    • $isdst 0または1 (サマータイム期間中は1、期間外は0)