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の限界でしょうかね。 誰かもっと素敵な書き方知ってたら教えてください。