LoginSignup
2
1

More than 5 years have passed since last update.

Perl6でのファイル操作

Posted at

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を指定し, 書き出すときは writeBlobを渡す.

#!/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ほどシンプルではないかもしれないですが, 型情報もありうっかりミスは減るので悪いものではないと思っています.

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1