Perl6の基本的なファイル操作を示します. (ほとんど参考 URLのままですが...)
ファイルの読み出し(Perl5スタイル)
open
関数で IO::Handle
インスタンスが返ってきます. open
の第二引数でファイルの開き方を指定します. :r
がリードオンリー, :w
が書き出し可能, :a
が追記書き出しとなります. バイナリの場合は :bin
を与える必要があります.
#!/usr/bin/env perl6
use v6;
sub MAIN($file) { # コマンドライン引数の第一引数としてファイルを受け取る
my $fh = open $file, :r;
print $fh.slurp-rest;
$fh.close;
}
バイナリファイルの読み出し
open
に :bin
フラグを渡します. バイナリを書き出す際も注意が必要です. Blobに変換し, それを受け取る writeメソッドで書き出します.
#!/usr/bin/env perl6
use v6;
sub MAIN($file) {
my $fh = open $file, :bin, :r;
$*OUT.write($fh.slurp-rest(:bin));
$fh.close;
}
ファイルの読み出し
StrインスタンスにIO
メソッドを呼び出すと IO::Path
インスタンスが返ってきます. これにより明示的に openすることなくファイルの読み出しが行えます.
#!/usr/bin/env perl6
use v6;
sub MAIN($file) {
print $file.IO.slurp;
}
ファイルの書き出し
open
で :w
フラグを指定します.
#!/usr/bin/env perl6
use v6;
sub MAIN($file) {
my $fh = open $file, :w;
$fh.say("こんにちわ世界");
$fh.close;
}
バイナリファイルの書き出し
open
で :bin
を指定し, 書き出すときは write
で Blob
を渡す.
#!/usr/bin/env perl6
use v6;
sub MAIN($file) {
my $fh = open $file, :w, :bin;
$fh.write("こんにちわ世界\n".encode("utf-8"));
$fh.close;
}
一行ずつ読みだして処理
IO::Handleの lines
で遅延リストが返ってきます. それを for文で処理することで毎行の処理ができます.
#!/usr/bin/env perl6
use v6;
sub MAIN($file) {
my $fh = open $file, :r;
for $fh.lines -> $line {
say "@@ $line";
}
$fh.close;
}
おわりに
Perl6の簡単なファイル操作を示しました. Perl5ほどシンプルではないかもしれないですが, 型情報もありうっかりミスは減るので悪いものではないと思っています.