私は現在perlを学んでおり、データベース(DBIモジュール)にアクセスして統計を引き出す短いスクリプトがあります。以下に投稿されたコードは少し反復的であるように思われ、ハッシュループに減らすことができるかどうか疑問に思います。各データベースクエリの唯一の違いは、myo_maps_studyの正規表現です。
#Get the number of myo stress studies
$sth = $dbh->prepare("SELECT count(myo_maps_study) FROM myo WHERE myo_maps_study ~ 'MYO[0-9]*\$' AND myo_date <= ? AND myo_date >= ?");
$sth->execute($date_stop,$date_start) or die "Couldn't execute myo stress query" . $sth->errstr;
my $n_myo_stress = $sth->fetchrow_array;
#Get the number of myo redistribution studies
$sth = $dbh->prepare("SELECT count(myo_maps_study) FROM myo WHERE myo_maps_study ~ 'MYO[0-9]*R\$' AND myo_date <= ? AND myo_date >= ?");
$sth->execute($date_stop,$date_start) or die "Couldn't execute myo rep query" . $sth->errstr;
my $n_myo_rep = $sth->fetchrow_array;
#Stress tomos
$sth = $dbh->prepare("SELECT count(myo_maps_study) FROM myo WHERE myo_maps_study ~ 'MYO[0-9]*T\$' AND myo_date <= ? AND myo_date >= ?");
$sth->execute($date_stop,$date_start) or die "Couldn't execute myo stress tomo query" . $sth->errstr;
my $n_stress_tomo = $sth->fetchrow_array;
#Rest tomos
$sth = $dbh->prepare("SELECT count(myo_maps_study) FROM myo WHERE myo_maps_study ~ 'MYO[0-9]*U\$' AND myo_date <= ? AND myo_date >= ?");
$sth->execute($date_stop,$date_start) or die "Couldn't execute myo rest tomo query" . $sth->errstr;
my $n_rest_tomo = $sth->fetchrow_array;
print "***** Imaging Statistics ************\n";
print "n_myo_stress: $n_myo_stress \n";
print "n_myo_rep: $n_myo_rep \n";
print "n_stress_tomo: $n_stress_tomo \n";
print "n_rest_tomo: $n_rest_tomo \n";
print "\n\n***********************************\n";
たとえば、キー値がn_myo_stress、n_myo_repなどであり、それらの値が正規表現MYO [0-9] \ $、MYO [0-9] * R\$などであるハッシュ配列を作成できます。
次に、を使用してデータベースクエリを実行し$sth->execute(hash value, $date_stop, $date_start)
、クエリの結果を$ hash_key(つまり、$ n_myo_stress)の形式のスカラーに割り当てることができますか。最後に結果を端末に出力します
フォーマットとインデントが不十分であることをお詫びします。スタックオーバーフローでこれを行う方法がわかりません。