きよへろの 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 + のあたりが微妙ですな。