きよへろのPerlコードをリファクタしようのコーナー No.3
さらに、今回の課題。
入力で渡したファイルの行頭に、行番号を加えるスクリプト
第3回目が始まってるようなのでやってみる。でも、今回は id:kiyohero のコードそのものが結構シンプルで直しどころがあんまりない。
#!/usr/bin/perl use strict; use warnings; while(<>){ printf "%3d:%s", $., $_; }
- <STDIN> → <> でもよかろう
- print でもいいけど prinf で桁そろえしてもいいかな
こんぐらいでしょうか。でも、これじゃ面白くないので敢えて難しく書いてみる。無駄に OO。
- kiyohero.pl
- lib/
- lib/FileHandle/LineNumber.pm
という構成になります。で、FileHandle を継承した FileHandle::LineNumber を作る。
package FileHandle::LineNumber; use strict; use warnings; use base qw (FileHandle); sub getline_with_number { my $line = shift->getline; $line ? sprintf "%3d: %s", $., $line : return; } 1;
kiyohero.pl からこれを使う。FindBin でライブラリのパスを見つけてるのがミソ。
#!/usr/local/bin/perl use strict; use warnings; use FindBin; use lib "$FindBin::Bin/lib"; use FileHandle::LineNumber; my $fh = FileHandle::LineNumber->new(shift) or die $!; while (my $line = $fh->getline_with_number) { print $line; } 1;
リファクタリングというか、君ならどう書くのコーナーになりつつあります。