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