きよへろの Perl コードをリファクタしようのコーナー
キーに姓、バリューに名を格納したハッシュに yasuhiro と引数を渡すことで onishi と返すスクリプト(今月始めに作成)
id:kiyohero が Perl を勉強しはじめたというのでリファクタしようのコーナーです。続くかどうかは分かりません。
#!/usr/local/bin/perl use strict; use warnings; my %staff = ( kondo => 'junya', ito => 'naoya', onishi => 'yasuhiro', danjou => 'nobuo', minowa => 'higepon', ); my $user = shift or die "usage: $0 <name>"; print $staff{$user}, "\n" if $staff{$user};
- 変数が入らない文字列はシングルクォートで。
- 警告が出るように use warnings を使おう。
- $ARGV[0] でもいいけど shift or die "usage ..." とかするとなんか今風。
- ハッシュから値を取り出すのにループは要らない。
- Perl Best Practice では後置 if は使うなとか言ってるけど余裕で使う。
と、思ったら value から key を検索してるのか。reverse 使えということで
#!/usr/local/bin/perl use strict; use warnings; my %staff = ( kondo => 'junya', ito => 'naoya', onishi => 'yasuhiro', danjou => 'nobuo', minowa => 'higepon', ); my $user = shift or die "usage: $0 <name>"; my %reversed = reverse %staff; print $reversed{$user}, "\n" if $reversed{$user};
こうかな。
#!/usr/local/bin/perl use strict; use warnings; my %staff = ( kondo => 'junya', ito => 'naoya', onishi => 'yasuhiro', danjou => 'nobuo', minowa => 'higepon', ); my $user = shift or die "usage: $0 <name>"; print +{ reverse %staff }->{$user}, "\n";
こんな風にも書けるらしい。print + のあたりが微妙ですな。