mieki256's diary



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 があるように見せかけることにする。

バージョン切替 :

Perlのバージョンの切替は、plch.bat というバッチファイルを作って行うようにした。やっていることは、環境変数PATHの最初のほうに、選んだ Perl のインストール場所を追加しているだけ。

_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; を書いて、警告が出ないようにあちこち修正しておいた。

動かなかった原因 :

おそらくだけど、sprintf() に指定しているフォーマット文字列(書式文字列)がおかしい気がする。YYYMMDD という文字列を取得するために、オリジナル版では以下のような指定になっていたけれど…。
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 日分です。

過去ログ表示

Prev - 2024/06 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project