Hokkaido.pm Casual#3に行ってきました

という訳で、#3だけど4回目のHokkaido.pm Casualに行ってきました。
今回は、前回より人が少なかったので雑談スタートでした。
ちなみに、次回の第3水曜日はお盆と重なってしまうため、
第4水曜日の8/22に開催します。
次回もよろしくお願いします。

今回のテーマはファイル入出力ということで、
ファイルを書いたり読んだりする話が出る予定だったのですが、
普通のファイル入出力は少なかった気がします。

PerlIOは少し難しかったですが、
perldoc.jp本体のページにいろいろ詳しく載ってます。

あと、自分のLT資料はこちらです。
「Perlでファイル書き出し」

で、ファイル名に”>”が付いてる場合ですが、
訳も分からず「脆弱性がぁ!」って言ってお茶を濁したので、
ちゃんと検証してみました。

use strict;
use warnings;

# ">"が先頭に付いたファイル名
my $file = '>test.txt';

# 追記モードで"test.txt"が開く
# "test.txt"が無ければ、生成される
open( FH, '>' . $file );
print FH "hello!\n";
close FH;

# 追記モードで"test.txt"が開く
open( FH, '>' . $file );
print FH "hello!\n"; # 追記される
close FH;

# 先頭に">"が付いてるので、"test.txt"が書き込みモードで開かれる
# open( my $fh, $file );

# ">test.txt"が存在しないので開けない
# open( my $fh, '<', $file );

# "test.txt"の中身
# hello!
# hello!

__END__

“>”が付いてるファイルは生成できませんでした!だとアレなので、
ちゃんと解決方法。

use strict;
use warnings;

my $file = '>test.txt';
my $fh;

open( $fh, '>', $file );
print $fh "hello!\n";
close $fh;

open( $fh, '>', $file );
print $fh "hello!\n";
close $fh;

open( $fh, '<', $file );
while ( <$fh> ) {
    print $_;
}
close $fh;

__END__

これなら”>test.txt”が生成されました。
あと、追記もされていません。
ファイル名に”>”とか、”<“を付けて読み書きの指定を行うと、
上記のようなケースを把握していないとハマる場合があるので、
基本的には、ファイル名に”>”や”<“を付けない方が良いと思います。

おしまい。

Leave a Comment