2024/06/15(土) [n年前の日記]
#1 [prog][perl] Strawberry Perl 5.8 をインストールした
2003年頃に書かれたPerlスクリプトの動作を確認したくて、Stareberry Perl 5.8.9.5 zip版を、Windows10 x64 22H2上でインストールした。
strawberry-perl-5.8.9.5.zip を入手して解凍。今回は D:\Perls\strawberry\5.8.9.5\ にコピーしてインストール。
当時の Srawberry Perl zip版は、Portable版ではない点に注意。Portable版はどの場所に置いても動くけれど、当時の zip版は C:\strawberry にインストールされている前提で作られてしまっている。例えば Strawberry Perl 5.8 の全ファイルに対して grep で C:\strawberry を検索すると、膨大なファイルがインストール場所を決め打ちしつつ作られていることが感じられる。.exeファイルの中にすら、件の場所が埋め込まれている。
仕方ないので、シンボリックリンクを張った。C:\strawberry に D:\Perls\strawberry\5.8.9.5 があるように見せかけることにする。
strawberry-perl-5.8.9.5.zip を入手して解凍。今回は D:\Perls\strawberry\5.8.9.5\ にコピーしてインストール。
当時の Srawberry Perl zip版は、Portable版ではない点に注意。Portable版はどの場所に置いても動くけれど、当時の zip版は C:\strawberry にインストールされている前提で作られてしまっている。例えば Strawberry Perl 5.8 の全ファイルに対して grep で C:\strawberry を検索すると、膨大なファイルがインストール場所を決め打ちしつつ作られていることが感じられる。.exeファイルの中にすら、件の場所が埋め込まれている。
仕方ないので、シンボリックリンクを張った。C:\strawberry に D:\Perls\strawberry\5.8.9.5 があるように見せかけることにする。
◎ バージョン切替 :
Perlのバージョンの切替は、plch.bat というバッチファイルを作って行うようにした。やっていることは、環境変数PATHの最初のほうに、選んだ Perl のインストール場所を追加しているだけ。
_plch.bat
_plch.bat
@echo off @rem Change Perl version @rem @rem Required. Environment variables must be set in advance. @rem @rem APERL_DIR=Active Perl Directory @rem BPERL_DIR=Strawberry Perl Directory set PERLNAME1=ActivePerl 5.28.1 set PERLPATH1=D:\Perls\aperl5.28.1.0000-x64-61d1e9f2 set PERLNUMB1=5281 set PERLNAME2=ActivePerl 5.8.9.827 set PERLPATH2=D:\Perls\aperl5.8.9.827-x86-291969 set PERLNUMB2=589 set PERLNAME3=Strawberry Perl 5.32.1.1 set PERLPATH3=D:\Perls\strawberry\5.32.1.1-x64 set PERLNUMB3=532 set PERLNAME4=Strawberry Perl 5.8.9.5 set PERLPATH4=D:\Perls\strawberry\5.8.9.5 set PERLNUMB4=5895 set PPATH= if "%1"=="/h" goto USAGE if "%1"=="-h" goto USAGE if "%1"=="--help" goto USAGE if "%1"=="%PERLNUMB4%" set PPATH=%PERLPATH4% if "%1"=="%PERLNUMB3%" set PPATH=%PERLPATH3% if "%1"=="%PERLNUMB2%" set PPATH=%PERLPATH2% if "%1"=="%PERLNUMB1%" set PPATH=%PERLPATH1% if not "%PPATH%"=="" goto SETPERLDIR echo Change Perl version. echo. echo 1 : %PERLNAME1% echo 2 : %PERLNAME2% echo 3 : %PERLNAME3% echo 4 : %PERLNAME4% echo. set SELNUM= set /P SELNUM="Select number : " if "%SELNUM%"=="1" set PPATH=%PERLPATH1% if "%SELNUM%"=="2" set PPATH=%PERLPATH2% if "%SELNUM%"=="3" set PPATH=%PERLPATH3% if "%SELNUM%"=="4" set PPATH=%PERLPATH4% if not "%PPATH%"=="" goto SETPERLDIR :USAGE echo. echo ---------------------------------------- echo Usage: echo plch %PERLNUMB1% echo plch %PERLNUMB2% echo plch %PERLNUMB3% echo plch %PERLNUMB4% echo. echo %PERLNUMB1% : %PERLNAME1% echo %PERLNUMB2% : %PERLNAME2% echo %PERLNUMB3% : %PERLNAME3% echo %PERLNUMB4% : %PERLNAME4% goto END :SETPERLDIR if "%PPATH%"=="%PERLPATH3%" goto SETSTRAWBERRY if "%PPATH%"=="%PERLPATH4%" goto SETSTRAWBERRY :SETACTIVEPERL echo Select ActivePerl set APERL_DIR=%PPATH% set ADD_PATH=%APERL_DIR%\bin set PATH=%ADD_PATH%;%PATH% goto SETEND :SETSTRAWBERRY echo Select Strawberry Perl set BPERL_DIR=%PPATH% set ADD_PATH=%BPERL_DIR%\c\bin;%BPERL_DIR%\perl\site\bin;%BPERL_DIR%\perl\bin set PATH=%ADD_PATH%;%PATH% goto SETEND :SETEND echo Change Perl PATH : %PPATH% :END
[ ツッコむ ]
#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桁なら動きそうな気もする…。自分、もしかして、以前はそういうタイミングで実行してしまって、動いてると思い込んでしまったのだろうか…。
[ ツッコむ ]
以上、1 日分です。