A cute trick, not quite a self-reproducing program, but an interesting example of a string that produces itself, is to take an arbitrary error message, and hand it back to the interpreter as input. On many systems if you repeat this 4-8 times, you reach a fixed point at which no further change occurs. This is also fun with a C compiler.