月曜日に「民主党 ブロガーと前原代表との懇談会」に行くといったら、妻に「弾はますます何者かわけわからなくなってるね」とからかわれたので、一応<まだ>Perlがで書ける事を証明しておこうというEntry.
キーに姓、バリューに名を格納したハッシュに yasuhiro と引数を渡すことで onishi と返すスクリプト(今月始めに作成)
#!/usr/local/bin/perl -w
use strict;
my $first = shift or die "$0 <firstname>";
my %last_name_of;
foreach my $line (<DATA>){
chomp $line;
last if $line eq '__END__';
my ($last, $first) = split /\s+/, $line;
$last_name_of{$first} = $last;
}
print $last_name_of{$first}, "\n";
__DATA__
kondo junya
ito naoya
onishi yasuhiro
danjou nobuo
minowa higepon
__END__
- ここではデータ構造をRefactorしてみた。こうしておけば余計なquotationは不要になるし、__DATA__を外部ファイルに移した場合も最小限の変更で済む。
- 逆に対象者のレベルを考えて、+{ reverse %staff }->{$user}のような too perlish な記法は避けた
- %last_name_ofという記法はDamian流。
- これの初期化の方法を変えたので、reverse()が不要になった。もちろん
my %last_name_of = reverse qw( kondo junya ito naoya onishi yasuhiro danjou nobuo minowa higepon );
という方法もあったが、ここでforeach{}をケチると、折角教習で書いているscriptからloopがなくなってしまうという点を考慮した。ちなみに私は普段はforeachとは書かずforと書く。 - 一応last if $line eq '__END__';で、__END__ token 以下を読まなくしてある。これでPODを尻付けしても大丈夫。
さらに突き詰めると、Hatena::Staffとか作ってそこで->last_name_of()とかいうMethodを作ってとかいう話にもなりそうだが、このレベルでOOPるのはいくらなんでも「まさかりでひげそり」というものだろう。
と、こんなところで。
Dan the Camel Abuser
http://www.razoredgesystems.com/