16章(単純なデータベース) 練習問題2
コマンドラインからPerl関数の名前を1個受け取って、perlfunc.podファイルの中でその関数が最初に現れる=item行の行番号を表示するプログラムを書いてください。
自作コードはこちら。
#!/usr/bin/perl use strict; use warnings; my $function = shift; dbmopen(my %DATA, "perlfunc", 0644) or die "cannot open perlfunc: ($!)"; if ($DATA{$function}) { print "$functionは$DATA{$function}行に存在します\n"; } else { print "$functionは存在しますせん\n"; }
出力結果はこちらになります。
C:\Perl\hajip>ex16-2.pl pop popは3745行に存在します C:\Perl\hajip>ex16-2.pl wantarray wantarrayは6663行に存在します C:\Perl\hajip>ex16-2.pl hoge hogeは存在しますせん C:\Perl\hajip>ex16-2.pl piyo piyoは存在しますせん C:\Perl\hajip>
それでは解答チェックに行きます。
…うお、16章(単純なデータベース) 練習問題1 - ABラボラトリで知ったテクニックを使って物凄いスマートに書いてある。
改良すると以下のコードになりました。
#!/usr/bin/perl use strict; use warnings; my $function = shift; dbmopen(my %DATA, "perlfunc", 0644) or die "cannot open perlfunc: ($!)"; my $line = $DATA{$function} || 'not found'; print "$function: $line\n";
肝の部分は
my $line = $DATA{$function} || 'not found';
ここ。短絡演算子をうまく活用することで長ったらしいif文がなくなっていますね。