車輪を再発明して上達する

Perlオブジェクト指向の練習も兼ねて、空き時間にちょこちょこあった簡単な開発ツールのパッケージ化にトライしました。シェルスクリプトとかハードコードなPerlスクリプトなどです。

個々はとても簡単なものが多いので、どういうものをどうやったらオブジェクト化する意味があるか考える上でもとても勉強になるし、面白いです。

実際にはもっとニッチな感じで、こういうものではないんですが、サンプルとして。

-+-- main.pl
 |
 +-- MyTool -+- File.pm
             |
             +- Other.pm
package MyTool::File;
#
# MyTool::File.pm 2007/10/04 
# hogehoge <hogehoge@example.com>
#

=head
This is the sample package.
=cut

use strict;
use warnings;
use Cwd;
use Fatal qw/ open close /;

# Static
my $hostname = &set_hostname;
my $current_dir = Cwd::getcwd;
my $fh;

sub set_hostname {
  open $fh, "hostname | ";
  my $hostname = <$fh>;
  close $fh;
  chomp $hostname;
  $hostname;
}

# Instance
sub new {
  my $self = shift;
  my $name = shift;
  bless { filename => $name }, $self;
}

sub parse_csv {  my $self = shift;
  my $file = $self->{filename};
  my @return;
  open $fh, $file;
  while (<$fh>) {
    chomp $_;
    push @return, [ split /,/, $_ ];
  }
  close $fh;
  \@return;
}
#!/usr/bin/perl
# main.pl

use strict;
use warnings;
use MyTool::File;

my $self = MyTool::File->new("sample.csv");
my $ref = $self->parse_csv;

foreach my $tmp ( @$ref ) {
   for (my $i=0; $i<$#$tmp; $i++){
     print $i, ":", $$tmp[$i], ",";
   }
   print "\n";
}

これは今書いてみたもので、もちろん既にこれよりいいものはたくさんあるわけですが、「もがいてもがいて車輪の再発明」っていうのも、未熟プログラマの上達には有益な気がします。