I'm sure there must be some modules lying around on CPAN to do exactly this, but if you want to roll your own...
- work out the minimum and maximum values of the graph - foreach (keys %survey) {$max = $_ if $survey{$_} > $survey{$max}; repeat and rinse for $min} or something.
- Do some maths to work out your scale factor,depending on how big you want your graph
- decide how you want to do your graphics - the two most common ways are stretching a single-pixel (<img width=$value height=$size_of_a_column src='pixel.gif' >) or just printing <td>'s with coloured backgrounds - either a single td with a styled size (using padding-right or similar) or a bunch of 'unit' cells that get filled in or not as the case may be.
- From then on it's all just print loops... :)
HTH, Ben.