I have been looking into different algorithms lately and have read quite alot about perlin noise. It seems like the only thing people use it for is to generate textures (clouds/wood grain) or to distribute trees.
What else can Perlin Noise be used for?
The best treatise on Perlin noise and things you can do with it I know is in Texturing and Modelling by Ebert, but Hugo Elias put together a rather good collection of pages on noise and other related subjects some time back which is worth a look.
I used it extensively for creating realistic-looking landscapes when I wrote a series of Landscape Visualisation programs back in the late 90 early 2000s using various forms of Perlin noise processes to handle the terrain generation. Many other programs do similar things - the wonderful Terragen for example.
I've also used it to apply realistic noise on top of other textures, for example to add 'roughness' to a Photorealistic Textile plugin for Photoshop.
Basically the charm of Perlin noise is that it's not random but turbulent, so in any case where you have a non-deterministic phenomenon it can be applied to give more 'natural' results. Defiantly a set or routines that any programmer should be familiar with as its use is appropriate in many circumstances where people tend to reach for a random number generator. For example using a Perlin function to derive variations in velocity of some modelled moving entity in a game (say due to wind or some such) works far better than applying random changes.