Perl で読みやすい SQL 文を作る

プログラマ的に読みやすいSQL文を書く Perl コード

私が通常使っているのは、以下のようなコードです。

#インサートする値は、%val に格納。ハッシュのキーがカラム名

#値を変更する場合は、ここから編集すればよい

#クオートが必要な値(文字列)
foreach (qw(subject description)){
    #値が空文字列でないことは予め確認しておく
    $val{$_} = $dbh->quote($query->Vars->{$_});
}
#クオート不要な値(数値)
foreach (qw(price quantity)){
    #値が数値か数値を表す文字列であることは予め確認しておく
    $val{$_} = $query->Vars->{$_};
}
#他に、必要な値を設定
$val{'time'} = time;
$val{'source'} = "'web'"; #文字列指定はクオートする
$val{'approval'} = 'NULL'; #データベースのキーワードはそのまま設定
$val{'point'} = 1000; #数値はそのまま設定。$val{'point'} = "1000" としても同。

#値を変更する場合は、ここまで編集すればよい

#SQL文作成(ここから先は一度書いたらいじらなくて良い)
@sort = keys %val; #カラム名を配列に格納。順番が固定される。

$sql = "INSERT INTO $tablename ( ";
$sql .= join(" , ", @sort); #ここで、カラム名を順番にカンマで結ぶ
$sql .= " ) VALUES ( ";
#以下の1行で、値を順番にカンマで結ぶ
$sql .= join(" , ", @val{@sort});
$sql .= " ); ";

この方式だと、カラムを増やすのも減らすのもハッシュ(%val)をコントロールすればよいだけなので、楽です。