【Perl】IO::Fileモジュールのメモ

Perlのモジュール「IO::File」を使うときのメモ。

読み込み

読み込むファイルを用意

読み込むファイルを用意。Windows環境でメモ帳で用意しているのでエンコードはsjis(cp932)になっているはず。「test_read_0.txt」という名前を付けて保存する。

1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目

テストスクリプトを書く

14行目のnewの第二引数 '<:encoding(locale_fs)’ は読み込みモードでエンコードは実行環境のファイルシステムに合わせるという意味。エンコードを指定しなくても良くなる。これは「Encode::Locale」モジュールの機能。「io_file_read_0.pl」という名前を付けて保存する。スクリプトのエンコードはUTF-8。

#!/usr/local/bin/perl

# -*- Encoding: UTF-8 -*-

use strict;
use warnings;
use utf8;
use Encode::Locale;
use IO::File;

binmode STDOUT, ":encoding(console_out)";

my $file = 'test_read_0.txt';
my $fh   = IO::File->new($file, '<:encoding(locale_fs)') or die $!;

while (my $line = $fh->getline) {
  print $line;
}

$fh->close;

exit;

16行目の my $line = $fh->getline は my $line = <$fh> のように書いても動作は同じ。getlineメソッドではなく、getlinesメソッドを使うとファイルの一括読み込みもできる(my @lines = $fh->getlines; のように書く)。

20行目の $fh->close; は undef $fh; でもファイルを閉じることができる。

コマンドプロンプトで実行する

コマンドプロンプトで実行、読み込みは正常にできた。

C:\home\perl>perl io_file_read_0.pl
1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目

書き込み

テストスクリプトを書く

14行目のnewの第二引数 '>:encoding(locale_fs)’ は書き込みモードでエンコードは実行環境のファイルシステムに合わせるという意味。追記モードにしたいときは > を >> にする。「io_file_write_0.pl」という名前を付けて保存する。

#!/usr/local/bin/perl

# -*- Encoding: UTF-8 -*-

use strict;
use warnings;
use utf8;
use Encode::Locale;
use IO::File;

binmode STDOUT, ":encoding(console_out)";

my $file = 'test_write_0.txt';
my $fh   = IO::File->new($file, '>:encoding(locale_fs)') or die $!;

for (my $i = 0; $i < 10; $i++) {
  $fh->print($i + 1, "行目\n");
}

$fh->close;

exit;

17行目の $fh->print($i + 1, “行目\n"); は print $fh $i + 1, “行目\n"; のように書いても動作は同じ。

コマンドプロンプトで実行する

コマンドプロンプトで実行。

C:\home\perl>perl io_file_write_0.pl

「test_write_0.txt」という名前のファイルができる。中身は下記のような感じ。エンコードは実行環境に合わせてsjis(cp932)で作成された。

1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目

過去の同じ日の記事一覧


Ro MaによるPixabayからの画像を使用しています。