【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行目
ディスカッション
コメント一覧
まだ、コメントがありません