日付時刻を元素番号に対応する元素記号に置換して表示する時計を作ってみる。
なんとなく試作。実用性は全くない。
#!/usr/bin/perl use strict; use warnings; use Time::HiRes qw(gettimeofday); my @element; $|=1; sub main { &init; # この while の中身は別の関数にすべきだったかも。。。 while(1) { my ($unixtime, $microsec) = gettimeofday; my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($unixtime); $year += 1900; $mon += 1; my $year_upper2digits = int($year/100); my $year_lower2digits = $year - $year_upper2digits * 100; $year_upper2digits = $year_upper2digits = 0 ? 100 : $year_upper2digits; $year_lower2digits = $year_lower2digits = 0 ? 100 : $year_lower2digits; # 時刻の 0 時は24時とする。 $hour = $hour = 0 ? 24 : $hour; # 分、秒の 0 は 60 とする。 $min = $min = 0 ? 60 : $min; $sec = $sec = 0 ? 60 : $sec; # 1秒以下の秒は1/100単位で処理し、0 =100 とする。 $microsec = $microsec / 10000; $microsec = $microsec = 0 ? 100 : $microsec; printf "%d/%02d/%02d ", $year, $mon, $mday, $hour, $min, $sec, $microsec; printf "%02d:%02d:%02d.%02d\n", $hour, $min, $sec, $microsec; printf "%2s%2s/%2s/%2s ", $element[$year_upper2digits]->{symbol}, $element[$year_lower2digits]->{symbol}, $element[$mon]->{symbol}, $element[$mday]->{symbol}; printf "%2s:%2s:%2s.%2s\r\033M", $element[$hour]->{symbol}, $element[$min]->{symbol}, $element[$sec]->{symbol}, $element[$microsec]->{symbol}; # select undef, undef, undef, 1; # これくらいの wait にしたほうが雰囲気が出るような気がする。 select undef, undef, undef, 0.13; } } &main; sub init { # 本来ならば $element[0] が参照されることは無いはずだが、 # 万が一参照された場合は 60 と同じ値を返す。 $element[0]={ symbol => 'Nd', name=>'ネオジム'}; $element[1] ={ symbol => 'H' , name=>'水素'}; $element[2] ={ symbol => 'He', name=>'ヘリウム'}; $element[3] ={ symbol => 'Li', name=>'リチウム'}; $element[4] ={ symbol => 'Be', name=>'ベリリウム'}; $element[5] ={ symbol => 'B' , name=>'ホウ素'}; $element[6] ={ symbol => 'C' , name=>'炭素'}; $element[7] ={ symbol => 'N' , name=>'窒素'}; $element[8] ={ symbol => 'O' , name=>'酸素'}; $element[9] ={ symbol => 'F' , name=>'フッ素'}; $element[10]={ symbol => 'Ne', name=>'ネオン'}; $element[11]={ symbol => 'Na', name=>'ナトリウム'}; $element[12]={ symbol => 'Mg', name=>'マグネシウム'}; $element[13]={ symbol => 'Al', name=>'アルミニウム'}; $element[14]={ symbol => 'Si', name=>'ケイ素'}; $element[15]={ symbol => 'P' , name=>'リン'}; $element[16]={ symbol => 'S' , name=>'硫黄'}; $element[17]={ symbol => 'Cl', name=>'塩素'}; $element[18]={ symbol => 'Ar', name=>'アルゴン'}; $element[19]={ symbol => 'K' , name=>'カリウム'}; $element[20]={ symbol => 'Ca', name=>'カルシウム'}; $element[21]={ symbol => 'Sc', name=>'スカンジウム'}; $element[22]={ symbol => 'Ti', name=>'チタン'}; $element[23]={ symbol => 'V' , name=>'バナジウム'}; $element[24]={ symbol => 'Cr', name=>'クロム'}; $element[25]={ symbol => 'Mn', name=>'マンガン'}; $element[26]={ symbol => 'Fe', name=>'鉄'}; $element[27]={ symbol => 'Co', name=>'コバルト'}; $element[28]={ symbol => 'Ni', name=>'ニッケル'}; $element[29]={ symbol => 'Cu', name=>'銅'}; $element[30]={ symbol => 'Zn', name=>'亜鉛'}; $element[31]={ symbol => 'Ga', name=>'ガリウム'}; $element[32]={ symbol => 'Ge', name=>'ゲルマニウム'}; $element[33]={ symbol => 'As', name=>'ヒ素'}; $element[34]={ symbol => 'Se', name=>'セレン'}; $element[35]={ symbol => 'Br', name=>'臭素'}; $element[36]={ symbol => 'Kr', name=>'クリプトン'}; $element[37]={ symbol => 'Rb', name=>'ルビジウム'}; $element[38]={ symbol => 'Sr', name=>'ストロンチウム'}; $element[39]={ symbol => 'Y' , name=>'イットリウム'}; $element[40]={ symbol => 'Zr', name=>'ジルコニウム'}; $element[41]={ symbol => 'Nb', name=>'ニオブ'}; $element[42]={ symbol => 'Mo', name=>'モリブデン'}; $element[43]={ symbol => 'Tc', name=>'テクネチウム'}; $element[44]={ symbol => 'Ru', name=>'ルテニウム'}; $element[45]={ symbol => 'Rh', name=>'ロジウム'}; $element[46]={ symbol => 'Pd', name=>'パラジウム'}; $element[47]={ symbol => 'Ag', name=>'銀'}; $element[48]={ symbol => 'Cd', name=>'カドミウム'}; $element[49]={ symbol => 'In', name=>'インジウム'}; $element[50]={ symbol => 'Sn', name=>'スズ'}; $element[51]={ symbol => 'Sb', name=>'アンチモン'}; $element[52]={ symbol => 'Te', name=>'テルル'}; $element[53]={ symbol => 'I' , name=>'ヨウ素'}; $element[54]={ symbol => 'Xe', name=>'キセノン'}; $element[55]={ symbol => 'Cs', name=>'セシウム'}; $element[56]={ symbol => 'Ba', name=>'バリウム'}; $element[57]={ symbol => 'La', name=>'ランタン'}; $element[58]={ symbol => 'Ce', name=>'セリウム'}; $element[59]={ symbol => 'Pr', name=>'プラセオジム'}; $element[60]={ symbol => 'Nd', name=>'ネオジム'}; $element[61]={ symbol => 'Pm', name=> 'プロメチウム'}; $element[62]={ symbol => 'Sm', name=> 'サマリウム'}; $element[63]={ symbol => 'Eu', name=> 'ユウロピウム'}; $element[64]={ symbol => 'Gd', name=> 'ガドリニウム'}; $element[65]={ symbol => 'Tb', name=> 'テルビウム'}; $element[66]={ symbol => 'Dy', name=> 'ジスプロシウム'}; $element[67]={ symbol => 'Ho', name=> 'ホルミウム'}; $element[68]={ symbol => 'Er', name=> 'エルビウム'}; $element[69]={ symbol => 'Tm', name=> 'ツリウム'}; $element[70]={ symbol => 'Yb', name=> 'イッテルビウム'}; $element[71]={ symbol => 'Lu', name=> 'ルテチウム'}; $element[72]={ symbol => 'Hf', name=> 'ハフニウム'}; $element[73]={ symbol => 'Ta', name=> 'タンタル'}; $element[74]={ symbol => 'W' , name=> 'タングステン'}; $element[75]={ symbol => 'Re', name=> 'レニウム'}; $element[76]={ symbol => 'Os', name=> 'オスミウム'}; $element[77]={ symbol => 'Ir', name=> 'イリジウム'}; $element[78]={ symbol => 'Pt', name=> '白金'}; $element[79]={ symbol => 'Au', name=> '金'}; $element[80]={ symbol => 'Hg', name=> '水銀'}; $element[81]={ symbol => 'Tl', name=> 'タリウム'}; $element[82]={ symbol => 'Pb', name=> '鉛'}; $element[83]={ symbol => 'Bi', name=> 'ビスマス'}; $element[84]={ symbol => 'Po', name=> 'ポロニウム'}; $element[85]={ symbol => 'At', name=> 'アスタチン'}; $element[86]={ symbol => 'Rn', name=> 'ラドン'}; $element[87]={ symbol => 'Fr', name=> 'フランシウム'}; $element[88]={ symbol => 'Ra', name=> 'ラジウム'}; $element[89]={ symbol => 'Ac', name=> 'アクチニウム'}; $element[90]={ symbol => 'Th', name=> 'トリウム'}; $element[91]={ symbol => 'Pa', name=> 'プロトアクチニウム'}; $element[92]={ symbol => 'U' , name=> 'ウラン'}; $element[93]={ symbol => 'Np', name=> 'ネプツニウム'}; $element[94]={ symbol => 'Pu', name=> 'プルトニウム'}; $element[95]={ symbol => 'Am', name=> 'アメリシウム'}; $element[96]={ symbol => 'Cm', name=> 'キュリウム'}; $element[97]={ symbol => 'Bk', name=> 'バークリウム'}; $element[98]={ symbol => 'Cf', name=> 'カリホルニウム'}; $element[99]={ symbol => 'Es', name=> 'アインスタイニウム'}; $element[100]={ symbol => 'Fm', name=> 'フェルミウム'}; $element[101]={ symbol => 'Md', name=> 'メンデレビウム'}; $element[102]={ symbol => 'No', name=> 'ノーベリウム'}; $element[103]={ symbol => 'Lr', name=> 'ローレンシウム'}; $element[104]={ symbol => 'Rf', name=> 'ラザホージウム'}; $element[105]={ symbol => 'Db', name=> 'ドブニウム'}; $element[106]={ symbol => 'Sg', name=> 'シーボーギウム'}; $element[107]={ symbol => 'Bh', name=> 'ボーリウム'}; $element[108]={ symbol => 'Hs', name=> 'ハッシウム'}; $element[109]={ symbol => 'Mt', name=> 'マイトネリウム'}; $element[110]={ symbol => 'Ds', name=> 'ダームスタチウム'}; $element[111]={ symbol => 'Rg', name=> 'レントゲニウム'}; $element[112]={ symbol => 'Cn', name=> 'コペルニシウム'}; $element[113]={ symbol => 'Uut', name=> 'ウンウントリウム'}; $element[114]={ symbol => 'Fl', name=> 'フレロビウム'}; $element[115]={ symbol => 'Uup', name=> 'ウンウンペンチウム'}; $element[116]={ symbol => 'Lv', name=> 'リバモリウム'}; $element[117]={ symbol => 'Uus', name=> 'ウンウンセプチウム'}; $element[118]={ symbol => 'Uuo', name=> 'ウンウンオクチウム'}; }