時間の関数を使った例です。
1: #! /usr/local/bin/ruby
2:
3: nowtime = Time.now
4:
5: print "Content-type: text/html\n\n"
6:
7: print "<H1>現在時刻 ", nowtime.hour, "時", nowtime.min, "分", nowtime.sec, "秒です</H1>\n"
8: print nowtime.strftime("<H1>現在時刻 %H時%M分%S秒です</H1>\n")
このプログラムは「現在時刻 13時 30分 2秒です」といった表示をします。
3行目で、現在時刻オブジェクトをつくってます。
Rubyの場合、すべてのデータがオブジェクトですので、「時刻のオブジェクト」というのを作ります。
「Time」というクラスの「now」というメソッドを使うことにより、現在時刻のオブジェクトができます。
そのオブジェクトの名前を、ここでは「nowtime」とします。
7行目は、print文を使って、HTMLを作る方法その1です。
「" "」で囲まれている部分は、そのままHTMLの文になります。
「nowtime.hour」の部分は、「現在時刻オブジェクトnowtimeの、メソッドhourを使う」という意味で、
現在時刻の時間(時分秒の時)が得られます。同様に、「nowtime.min」が分、「nowtime.sec」が秒になります。
「hour、min、sec」といったメソッドは、Timeクラスから作られたインスタンス
(ここでは nowtimeオブジェクト)で使えるメソッドです。
(Rubyでは、Perlのように「""」の中に変数を埋め込むこともできます。printf文も使えます)。
8行目は、ほぼ同じ結果を出力するものです。
時間については、特に「フォーマットに従った時刻表示」というメソッドがあります。
「strftime」というのがそのメソッドで、続く「(" ")」の中に、フォーマットを書きます。
簡単に言えば、%Hが時間、%Mが分、%Sが秒を表す数字に置き換えられて出力されます。
厳密には、7行目では「0時58分4秒」となるのに対し、8行目では「00時58分04秒」になるといった違いがあります
次に、時刻によってあいさつを表示するプログラムを作ってみましょう。
1: #! /usr/local/bin/ruby
2:
3: nowtime = Time.now
4: hour = nowtime.hour
5:
6: if hour < 5 or hour > 19
7: aisatsu = "こんばんは!"
8: elsif hour < 10
9: aisatsu = "おはようございます!"
10: else aisatsu = "こんにちは!"
11: end
12:
13: print "Content-type: text/html\n\n"
14: print "#{aisatsu}\n"
時刻から言葉の場合分けをする、基本的なロジック部分は、Perlの場合と同じです。
形式的には、かっこを使わなくてもできますが、条件分岐ブロック(繰り返しとかでも)の最後に「end」を書く必要があります。
4行目で、nowtime.hour の値を変数hour に入れてます(名前が長いと面倒なので)。
最後、14行目で、「" "」の中に変数を埋め込む場合は、「#{ }」で変数を囲みます。
注意:Rubyでは、大文字で始まる名前は定数になり、一般の変数(ローカル変数)名は、小文字で始まります。
しかし、上の例では「aisatsu」を「Aisatsu」としても、一旦代入されたら変更されないので、Aisatsuという定数としても問題ありません。