RubyをかじったPerl使いの暴走 (File I/O編)
テキストファイルを読み込んで単純に変数に突っ込みたい、として、 Rubyで書くとたとえばこんな感じ。
s = open('foobar') { |f|
f.read
}
- ブロック終わりに勝手に
close
してくれる - (1.9系なら)
パラメータ
f
はブロックスコープ
素敵やん?一方でPerlの場合。
open(my $fh, '<', 'foobar');
my $s = join('', <$fh>);
close($fh);
- いちいち
close
しなきゃいけないのめんどくね… $fh
、せっかくmy
宣言してるのに、スコープ絞れてないぢゃん…- 同じスコープ内で
my $fh
したら、use warnings
してるときに怒られるし… - かと言って変数名いちいち変えるとかやってらんないよね…
- 同じスコープ内で
ダサい!Rubyの素敵さを是非Perlにも!
my $s;
{
open(my $fh, '<', 'foobar');
$s = join('', <$fh>);
}
ダサい!取って付けたような my $s
がダサい!もう一声!
my $s = &{sub{
open(my $fh, '<', 'foobar');
join('', <$fh>);
}};
キモい!
無名サブルーチンのリファレンスをその場でデリファレンスとかキモい!
でも文字列の中で式展開するのに "@{[ ~ ]}"
が
割と普通に使われてることを考えると、
これはこれでアリ…なの?
とまぁ、コレくらいがPerlの限界でしょうかね。 誰かもっと素敵な書き方知ってたら教えてください。