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 の場合は、シバング行で区別するんだろうな…
で、フラッシュメモリのポータブル版よりもハードディスクの正式版の方が起動が早いと感じた。キャッシュの影響もあるのかな。。。