If you *really* want to compile self-contained file that requires something then uses it, The solution is to use (1) eval-when and (2) funcall 'require, to not get optimized away by clisp.
(eval-when (:compile-toplevel :load-toplevel :execute) (funcall 'require :cl-ppcre)) ;; in this case, asdf:load-system is cleaner than require. (cl-ppcre:...)
That said, the above is OK for a one-off experiment, but not at all recommended for libraries or even for sets of experiments.
For publishable libraries, I recommend to write a .asd file for your system.
For sets of experiments, I recommend you use the asdf-package-system (itself inspired by quick-build, and soon to be released as part of asdf 3.1.1), whereby you have a single .asd file for all your experiments (say my-experiments.asd), and then you can (asdf:load-system :my-experiments/foo/bar) and it will read foo/bar.lisp under the directory of my-experiments.asd, deduce its dependencies from the defpackage, and compile and load everything. Adding a new system to the hierarchy is simply a matter of creating a file with a defpackage, and only files needed are compiled and loaded.
(Sorry for a late reply, I am not actively following this mailing-list)
—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org "The direct use of force is such a poor solution to any problem, it is generally employed only by small children and large nations." – David Friedman