2024/06/15(土) [n年前の日記]
#2 [perl][hns] Ore Power Goldが動くように修正
この日記ページを表示しているHNS(Hyper Nikki System)の日記ファイル *.hnf を読み込んで、どの日の文章量が多いのかをテキストでグラフ表示する Ore Power Gold というCGIがある。
_Ore Power Home Page (WebArchive)
しかし、今現在の環境では何故か動かなくなっていたので、原因を調べてた。
一応、動くようになった版を置いておく。以下の環境で動作確認した。
_opg.cgi
せっかくだから、use strict; と use warnings; を書いて、警告が出ないようにあちこち修正しておいた。
_Ore Power Home Page (WebArchive)
しかし、今現在の環境では何故か動かなくなっていたので、原因を調べてた。
一応、動くようになった版を置いておく。以下の環境で動作確認した。
- Windows10 x64 22H2 + Starwberry Perl 5.32.1.1 x64
- Debian Linux 10 buster + Perl 5.28.1
_opg.cgi
せっかくだから、use strict; と use warnings; を書いて、警告が出ないようにあちこち修正しておいた。
◎ 動かなかった原因 :
おそらくだけど、sprintf() に指定しているフォーマット文字列(書式文字列)がおかしい気がする。YYYMMDD という文字列を取得するために、オリジナル版では以下のような指定になっていたけれど…。
以下は動作確認用のスクリプト。
_01_sprintf.pl
Windows10 x64 22H2 + Strawberry Perl 5.32.1.1 64bit で実行すると以下の結果になる。
昔は動いていた記憶があるのだけど…。Ore Power Gold (opg.cgi) は2003年頃に書かれたスクリプトらしいので、その頃の Perl のバージョンなら動くのだろうか。ググって確認してみたところ、当時は Perl 5.8 が一般的だったらしい。
Active Perl 5.8.9.827-x86-291969、及び、Strawberry Perl 5.8.9.5 で動作確認してみたけれど、同じ結果になる…。変だなあ…。
年月日の日が1桁だとおかしくなるけれど、2桁なら動きそうな気もする…。自分、もしかして、以前はそういうタイミングで実行してしまって、動いてると思い込んでしまったのだろうか…。
sprintf("%0.4d%0.2d%02.d", 2024, 6, 8);
以下は動作確認用のスクリプト。
_01_sprintf.pl
use strict; use warnings; my ($s); print sprintf("%0.4d%0.2d%02.d", 2024, 6, 8), "\n"; print sprintf("%04d%02d%02d", 2024, 6, 8), "\n";
Windows10 x64 22H2 + Strawberry Perl 5.32.1.1 64bit で実行すると以下の結果になる。
> perl 01_sprintf.pl 202406 8 20240608
昔は動いていた記憶があるのだけど…。Ore Power Gold (opg.cgi) は2003年頃に書かれたスクリプトらしいので、その頃の Perl のバージョンなら動くのだろうか。ググって確認してみたところ、当時は Perl 5.8 が一般的だったらしい。
Active Perl 5.8.9.827-x86-291969、及び、Strawberry Perl 5.8.9.5 で動作確認してみたけれど、同じ結果になる…。変だなあ…。
> perl 01_sprintf.pl 202406 8 20240608
> perl 01_sprintf.pl 202406 8 20240608
年月日の日が1桁だとおかしくなるけれど、2桁なら動きそうな気もする…。自分、もしかして、以前はそういうタイミングで実行してしまって、動いてると思い込んでしまったのだろうか…。
[ ツッコむ ]
以上です。