Цитата: почему? в чем разница?
  #Знакомы с понятием "черный ящик"? 
 что такое, скажем, selectall_arrayref: 
 prepare 
 execute(@params) 
 Slice ? Slice : [] 
 MaxRows ? { fetchall_arrayref; finish} : fetchall_arrayref   
 Теперь далее, знаем, что СуБД крупные ответы выдает не сразу, кусками в течении некоторого времени.   
 В случае с prepare/execute/while(bla=fetchrow_arrayref) мы разбираем также постепенно данный ответ, дополняя сразу необходимую структуру. Все конкатерации, все обработки в своих ф-циях и т.д. (т.е. операции, которые приводят к дублированию памяти, почитайте, про утечки в перле есть статьи даже на русском) дадут дублирование только для маленьких порций данных. 
 В случае с selectall_arryref, для обработки придет уже ссылка на весь блок данных, который уже и предстоит дозатачивать.    
Цитата: DBIx::Class Firebird не поддердживает, хотел на ней писать  
   
 дело в том что в моей программе есть много запросов которые там не сделать, это массивы SQL и т.д.
  Хмм, однако, не знал про Файрбёрд, хотя все равно пользую только Оракл и Постгрес сейчас.   
 Динамическая генерация запроса + все та же параметризация (только динамическая же подготовка параметров). Я подобные вещи делал, в принципе, хоть и немного в другой ипостаси. 
 В любом случае, решать вам 
 Цитата:
    Цитата: я предпочитаю SQL::Abstract!  
 вот посмотрие как я написал класс CRUD для SQL::Abstract: http://www.lissyara.su/?id=1962 зеркало http://unixforum.org.ua/index.php?topic=26299
  Не совсем то, что хотел увидеть, но авось интересные идеи и найду.   
 ЗЫ: судя по стилю сообщений и crud/catalyst могу предположить, что вы gcc/винград?