|Perl: the Markov chain saw|
If I am off the mark, here, I trust our local computer scientists will set me straight.
Quoth the Camel's glossary:
Anything you can legally say in a spot where a value is required. Typically composed of literals, variables, operators, functions, and subroutine calls, not necessarily in that order.
Similarly, Barron's Dictionary of Computer and Internet Terms says an expression is a series of symbols that can be evaluated to have a particular value, while a statement is a single instuction in a computer language.
In your example, then, 1+1 is actually the expression; it's not much of a statement, since it (normally) doesn't tell Perl to do anything meaningful.
$x = 1+1 is a statement, if you terminate it with a semicolon. It tells Perl to do something... evaluate the expression 1+1 and assign the result to $x.
It's not actually quite as clear cut as that, however. For instance, I believe 1+1 can qualify as a statement, as when you use it thus:
Here it's telling Perl that the return value of &two should be 2. Likewise, $x = 1+1 can be used as an expression:
perl -e 'print "Yup\n" if $x = 1+1;'
Here $x = 1+1 is used as an expression, with the conditional depending on its return value (which happens to be 2).
If this seems vague, remember that these terms are for your use, to help you express yourself. Whether you choose to call $x = 1+1 a statement or an expression tells us something of the way you're regarding it in the present context.