Scientific software for performing large computations is typically managed using textual control files that specify the parameters of the computation. Historically, these control files have typically consisted of long, inflexible collections of numbers whose meaning and format is hard-coded into the program. With libctl, we make it easy for programmers to support a greatly superior control file structure, and with less effort than was required for traditional input formats. All of these goals are achieved by libctl with the help of Guile, the GNU scripting and extensibility language. Guile does all of the hard work for us, and allows us to embed a complete interpreter in a program with minimal effort. Despite its power, libctl is designed to be easy to use. A basic user only sees a convenient file format with a programming language to back it up if her needs become more complex. For the programmer, all headaches associated with reading input files are lifted--once an abstract specification is supplied, all interaction with the user is handled automatically.