実用的なプログラムの多くに欠かせないものの一つとして、ファイルの読み書きがあります。まずは 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 のようなモジュールが必要ですね。