Perl楽しいから好き

Perlをはじめとしたプログラミング周りのあれこれについて。モダーンなPerlを楽しんでいます。

Perlで300ページ以上の静的HTMLファイルの「http://」を「https://」に一気に置き換える。バックアップファイルを保存しながら、ね。

2018年7月某日、グーグルがSSL/TLS未対応サイト絶対許さんマンになってから、「うちのサイトもなんとかしてほしい」という問い合わせが増えてきました。「保護されていない通信」とかデカデカと表示されたら、流石に焦りますよね。

オープンソースのおかげで、無料だったり、年間1000円くらいの安価なサーバー証明書も充実してきたので、割と気軽にSSL化できちゃいます。いい時代です。そんな中、静的HTMLファイル内のリンクを大量に書き換えなきゃな案件が出てきました。WordPressとかだったら「Search Regex」とかのプラグインでサクッと置き換えちゃえばOKですが、静的HTMLだとそうはいきません。こんなときは・・・

そうです、Perlの出番です!


ということで、とりあえず欲しい結果が得られるスクリプトをサクッと書いて対応しました。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use feature qw/say/;
use Encode qw/encode decode/;
use File::Copy qw/copy/;

# カレントディレクトリの「 *.html 」を取得
my @files = glob('*.html');

# 取得したファイルを標準出力で確認
say for @files;

foreach (@files) {
    # 拡張子に「 .bak 」を足してバックアップ保存
    copy($_, $_ . '.bak') or die "Can't copy: $!";

    open my $fh, '<', $_
        or die "Can't open $_: $!";

    my @html = <$fh>;

    open my $fh_out, '>', $_
        or die "Can't open $_: $!";

    foreach(@html){
        $_ = decode('utf8', $_);
        $_ =~ s#http://example.com/#https://example.com/#g;
        print $fh_out encode('utf8', $_);
    }
}


Perlやってて、ホントによかった~♪