ファイルの扱い

risou
2010-12-11

ファイルの読み書き

実用的なプログラムの多くに欠かせないものの一つとして、ファイルの読み書きがあります。まずは Perl 6 でのファイルの扱い方を例示してみましょう。
まずはファイル読み込みの例です。

my $file = open 'filename';

for $file.lines -> $line {
	say $line;
}

close $file;

次にファイル書き込みの例です。

my $file = open 'filename', :w;

$file.say('output text for file.');

close $file;

ファイル書き込みの場合は、 open 関数の第二引数に ":w" を指定してください。読み込みの場合は第二引数に ":r" ですが、これはデフォルト値なので、第二引数を指定しなければファイル読み込みになります(上記例参照)。

また、ファイル読み込みについては、 Perl 6 では slurp というファイルの中身を String で返す関数があります。

$ perl6
> slurp 'filename'
output text for file.

>

補足:文字コードについて

Perl 6 で現在扱える文字コードは限られています(UTF-8, ascii, iso-8859-1)。現時点で日本語を扱うのであれば、文字コードは UTF-8 一択になります。

実際に UTF-8 と Shift-JIS のファイルを読み込んでみましょう。

このファイルは、
文字コード: UTF-8
改行コード: LF
で作成されました。

上記は UTF-8 ( LF ) で作成したテキストファイルです。このファイルを読み込むと以下の様になります。

$ perl6
> slurp 'utf8'
このファイルは、
文字コード: UTF-8
改行コード: LF
で作成されました。
>

次に Shift-JIS ( CRLF ) で作成したテキストファイルを読み込んでみましょう。

このファイルは、
文字コード: Shift-JIS
改行コード: CRLF
で作成されました。

このファイルを読み込むと以下の様にエラーとなります。

$ perl6
> slurp 'sjis'
Malformed UTF-8 string

>

また、テキストファイルの文字コードだけでなく、 .pl ファイルの文字コードにも注意が必要です。

#!/usr/bin/env perl6
use v6;

say "このファイルの情報:";
say " 文字コード: UTF-8";
say " 改行コード: LF";

上記スクリプトを実行すると、意図した通りの結果が出力されます。

$ perl6 utf8.pl
このファイルの情報:
 文字コード: UTF-8
 改行コード: LF

最後に Shift-JIS で書かれた以下の .pl ファイルを実行してみましょう。

#!/usr/bin/env perl6
use v6;

say "このファイルの情報:";
say " 文字コード: Shift-JIS";
say " 改行コード: CRLF";

実行結果は以下の様になります。やはりエラーが出力されました。

$ perl6 sjis.pl
===SORRY!===
Malformed UTF-8 string

日本語を扱う場合、当面はスクリプトも扱うファイルも UTF-8 にしておきましょう。一刻も早く Perl 5 の Encode.pm のようなモジュールが必要ですね。