Perlの変数名とSQLのワイルドカード
Perlの変数名は、ファニー文字($,@,%等)を除くと、英字または『_』で始まり、英文字、数字、『_』のみから構成されます。
一方、SQLの主なワイルドカードは、『%』と『_』です。
Perlロジック内で、SQL文の文字列編集をする時に、ワイルドカード『%』は変数名の直後に置いても問題ありません。
なぜなら、変数名には『%』が含まれることが仕様上ないからです。
ちなみに、先頭にはファニー文字『%』とかぶるのでNGです。
しかし、ワイルドカード『_』は、変数名の構成文字『_』とかぶるので問題があります。
なので、変数名の直後にワイルドカード『_』は置けないのです。
したがって、そのようなときは、変数のある文字列とワイルドカードのある文字列を連結して編集します。
ワイルドカード『%』
my $where = "aaa"; my $sql = "SELECT hoge FROM hogeTBL WHERE hoge LIKE '$where%'";
ワイルドカード『_』
my $where = "bbb"; my $sql = "SELECT hoge FROM hogeTBL WHERE hoge LIKE '$where" . "_'";