【perl】配列からプレースホルダを作る
いい加減perlにも慣れてきたんで、
そろそろmapとかgrepとかバリバリ使いこなして
ソースのスピード化を推進していきたいと思う今日この頃。
とりあえず、今日は効率のいいプレースホルダの作り方について。
たとえば、
my @arr = (foo1 foo2 foo3);
から
INSET INTO TABLE(col1 col2 col3)VALUES(?,?,?);
のようなSQLのプレースフォルダを作る場合。
今まで。。。
my $param =''; foreach my $val (@arr) { $param .= '?,'; } chop $param;
今日は
return substr('?,' x @arr, 0, -1);
でやってみた。
かなりシンプルだし、早くなった気がする。
けど、ソースの意味がわからん。
(出所 -> 配列から効率良くプレースホルダを作る)
substr はなんとかわかるけど、x ってなに?
どっかで見たことあるような気がする。
でもどんな演算しだったかいまいちわからない。
で、調べた。
やっぱり、ポイントは「x」だった。
「x」 は 「String repetition operator」というもので、
文字列繰り返し演算子(?)というものらしい。
(Learning Perlより)
'?,' x @arr
という文脈の場合
'?,'を@arrの個数分繰り返すという意味らしい。
なるほど。
それでsubstrで最後の余分な','を取り除いて完了ってわけですな。