パンデミック後の新世界を作るために (foussin’s blog)

(『見捨てられた世代』からの提言)

Strawberry Perl をインストールした(経過報告:2021.6/23)

 自分は今まで、ずっと ActivePerl を使ってきたが、ActivePerl のインストールには、PC がネット接続している必要があるみたいで、完全スタンドアロン状態の PC にはインストールできなかった。

 で、代わりに Strawberry Perl(v5.32.1)をインストールした(通称 苺Perl)。こっちは無事にインストール出来た。Strawberry Perl には「ポータブル版」もあったので、それもフラッシュメモリにインストールしてみた。

 ポータブル版の実行にはインストール・フォルダの「portableshell.bat」をダブルクリックする。すると、ポータブル版Perl のパスを通したタスクでコマンドプロンプトが起動する。↓

----------------------------------------------
 Welcome to Strawberry Perl Portable Edition!
 * URL - http://www.strawberryperl.com/
 * see README.TXT for more info
----------------------------------------------
Perl executable: E:\strawberry-perl\perl\bin\perl.exe
Perl version   : 5.32.1 / MSWin32-x64-multi-thread

E:\strawberry-perl>perl -v

This is perl 5, version 32, subversion 1 (v5.32.1) built for MSWin32-x64-multi-thread
…(以下略)…

 これでネカフェでも Perl が使える。やったね。とりあえず簡単なスクリプトを書いて動作確認。とは言っても、高度なスクリプトは故障中の PC の中にあって見る事もできないし。。。

 とりあえず当ブログを開設してから、定期的に PV数を報告してきたが、その経過日数でも求めてみようと思う。

経過報告:2021.6/23(水)

2021.03.04 thu:ブログ開設
2021.03.18 thu:pv   8:入金 0 (開設から2週間)
2021.04.01 thu:pv  21:入金 0 (開設から4週間)
2021.04.22 thu:pv  40:入金 0 (1か月+3週間)
2021.05.26 wed:pv 118:入金 0 (2か月+3週間)
2021/06/23 wed:pv 179:入金 0 (3か月+3週間)
記事総数:71

 ブログ開設年月日から最終更新日までの経過日数を求めるなら、Time::Local 'timelocal' を使うのが簡単。timelocal() は日時を意味する引数リストから「エポック秒」を求めるプロシージャ(関数)。エポック秒の差から経過秒数が簡単に求められる。

 コマンドプロンプトで日本語出力するなら use utf8; use Encode; も必要だと思うが、今回は ASCII 文字列を出力するだけなので省略。スクリプトは utf8(BOM無し) で保存する。
 Windows であっても、テキストファイルは utf8 で保存するのが今ではスタンダードだろう。コマンドプロンプトでの実行なので、復改コードは「CR/LF」にした。
 「LF」だけでも実行できたような記憶があるが、それはいずれ確認する。確か、バッチファイルだけが「CR/LF」でないと実行できなかった記憶があるが、久し振りのコーディングなので記憶がアヤフヤだ。。。

#/usr/bin/perl

use strict;
use warnings;
use Time::Local 'timelocal';

# my $sec = timelocal($sec,$min,$hour,$mday,$month,$year);
# don't forget! => $year-=1900;  --$month;
# 24h = 60 * 24min = 60 * 60 * 24sec = 86400sec

my $date1 = "2021.03.04 12:00:00";
my $date2 = "2021/06/23 12:00:00";
my @arg1 = reverse(split(/[\.\/: ]/,$date1));
--$arg1[4];
$arg1[5] -= 1900;
my @arg2 = reverse(split(/[\.\/: ]/,$date2));
--$arg2[4];
$arg2[5] -= 1900;
my $epoch1 = timelocal(@arg1);
my $epoch2 = timelocal(@arg2);
my $past = $epoch2 - $epoch1;
my $days = $past / 86400;
print "since(sec): $epoch1\n";
print "   to(sec): $epoch2\n";
print " past(sec): $past\n";
print "past(days): $days\n";

__END__
past_days.pl

実行結果(E:フラッシュメモリで実行)。↓

E:\strawberry-perl>perl past_days.pl
since(sec): 1614826800
   to(sec): 1624417200
 past(sec): 9590400
past(days): 111

 自分は古い人間なので、オブジェクト指向は詳しくない。古典的な構造化プログラミング(レガシースタイル)で申し訳ない。しかも、同じ事を2回ずつ実行してるので、本来ならサブルーチンにすべきだった(my変数が多すぎ)。
 print文の羅列も幼稚な感じがする。ヒアドキュメントを使うべきだったか。まあ、動作確認用のサンプルなので大目に見てほしい。 (^^;

 ブログ開設(2021.3/4)から 2021.6/24 までの経過日数は 111日だと分かった。更新時刻を 12:00:00 決め打ちにしたので、日数は必ず整数値となる。ブログ更新時刻を精密に記録している場合は実数値になるので、その場合は use POSIX 'floor'; や printf() などを使い、適当に丸めるといいだろう。

 ポータブル版 Perl では「拡張子の関連付け」が出来ないので「perl past_days.pl」と入力しないと実行できない。
 ノーパソには正式版 Perl もインストールしたので、スクリプト名だけで起動すると正式版 Perl が起動する。コンソールでのちょっとした指定の違いで、2種類の Perl を選択して起動できる…なんか面白いな。linux の場合は、シバング行で区別するんだろうな…

 で、フラッシュメモリのポータブル版よりもハードディスクの正式版の方が起動が早いと感じた。キャッシュの影響もあるのかな。。。