One of the differences between the various modules is how they store the SQL.
SQL::Catalog stores the SQL in an RDBMS;
DBIx:POS stores it in Plain Old SQL, a POD-like format;
Class::Phrasebook::SQL stores it in XML.
Personally I have a preference for storing the SQL in plain text files for easy editing. I use SQL comments to name the snippets and read the names and snippets into a hash with a simple parse on /;\n\n+/. One advantage of doing it that way is that the files are nothing but pure SQL and so can be run through dbish or other SQL-file processors specific to various RDBMSs and can be easily read by DBAs with no knowledge of how the SQL is used in an application or even what language the app is written in.