|Think about Loose Coupling|
I just wanted to point out a site I discovered recently, and which has been very helpful in sharping my programming skills. It's called Project Euler and consists of "a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems."
Some sample problems (only after you have created an account can you see how difficult the problem is rated, and the number of users that have solved each problem):
What is the smallest number divisible by each of the numbers 1 to 20?
How many Sundays fell on the 1st of the month during the twentieth century?
How many distinct terms are in the sequence generated by ab for 2 ≤ a ≤ 100 and 2 ≤ b ≤ 100?
Find the first four consecutive integers to have four distinct primes factors.
And so on and on (more than 100 such problems are already posted on the site).
A forum is available to discuss strategies used in solving the problems (and you can often find some wonderful elegant or creative code there, in many different programming languages), however access is only granted AFTER you have solved a problem.
After having solved some problems, It seems to me that the most current languages to solve the problems in are either C/C++ or Python, so... do I sense an opportunity here for the Perl community to show off their skills? ;-)
Incidentally, I hope that this thread can become the place for people who get really stuck while trying to solve a problem, where they can get hints and pointers in the right direction (without revealing the solution of course).
Happy fun coding!