Perlサンプル6 ファイルの書き出し
投稿:2019-08-26
漢字入りファイル名のファイルに漢字を書き出します。
#!/usr/bin/env perl
use v5.26;
use utf8;
use strict;
use warnings;
use Encode::Argv;
use Encode::Locale;
use open IO => ":utf8";
binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";
$| = 1;
use constant FILENAME => "perlsample_006_俺の嫁.txt";
if (open my $fh, ">:unix:utf8", Encode::encode locale_fs => FILENAME) {
say $fh "たこルカは俺の嫁";
say $fh "ルカ姐さんも俺の嫁";
close $fh;
say "ファイルを書き出しました:" . FILENAME;
} else {
say "ファイルを開けませんでした:$!";
}
ファイルを書き出しました:perlsample_006_俺の嫁.txt
ファイルの中身です。 改行が0x0aなのでWindowsのメモ帳では1行に表示されます。
たこルカは俺の嫁
ルカ姐さんも俺の嫁
use constant
「定数を式で使ったとき、Perl はこれをコンパイル時に値に置き換え、それから さらに式を最適化します。 特に、if (CONSTANT) ブロックにあるコードは、定数が偽の時には最適化されて なくなります。」
constant - 定数を宣言するための Perl プラグマ - perldoc.jp
">:unix:utf8"
ファイル出力、改行は0x0a、文字コードはUTF-8を指定します。 オプションを指定した事で「use open IO => ":utf8"」の:utf8が無効になっていますから、改めて:utf8を指定することに注意してください。 前後を入れ替えて">:utf8:unix"で漢字を出力すると警告が出ます。 改行を0x0d、0x0aにしたい場合は">:crlf:utf8"としてください。 何故か">:utf8:crlf"でも動作します。
say $fh "たこルカは俺の嫁"
「say FILEHANDLE LIST」
Perlの組み込み関数 say の翻訳 - perldoc.jp