Node:Expressions, Previous:A First Perl Program, Up:Getting Started

Expressions, Statements, and Side-Effects

Before we begin introduce more Perl code examples, we want to explain the ideas of an expression and a statement, and how each looks in Perl.

Any valid "chunk" of Perl code can be considered an expression. That expression always evaluates to some value. Sometimes, the value to which expression evaluates is of interest to us, and sometimes it is not. However, we always must be aware that each expression has some "value" that is the evaluation of that expression.

Zero or more expressions to make a statement in Perl. Statements in Perl end with a semi-colon. For example, in the Perl code we saw before, we turned the expression, chomp($userName), into a statement, chomp($userName); by adding a ; to the end. If it helps, you can think about the ;s as separating sets of expressions that you want Perl to evaluate and execute in order.

Given that every expression, even when combined into statements, evaluate to some value, you might be tempted to ask: What does the expression chomp($userName) evaluate to? It turns out that expression evaluates to the total number of characters removed from the end of the variable $userName. This is actually one of those cases where we are not particularly interested in the evaluation result of the code. In this case, we were instead interested in what is called the side-effect of the expression.

The side-effect of an expression is some change that occurs as a result of that expression's evaluation. Often, a side-effect causes some change in the state of the running program, such as changing the value of a variable. In the expression chomp($userName), the side-effect is that any newline characters are removed from the end of the variable, $username.

Let's now consider a slightly more complex statement, and look for the the expressions and side-effect. Consider the statement, $username = <STDIN>; from our first program. In this case, we used the expression, <STDIN> as part of a larger expression, namely $username = <STDIN>. The expression, <STDIN> evaluated to a scalar value, namely a string that represented a line from the standard input. It was of particular interest to us the value to which <STDIN> evaluated, because we wanted to save that value in the variable, $username.

To cause that assignment to take place, we used the larger expression, $username = <STDIN>. The side-effect of that larger expression is that $username contains the value that <STDIN> evaluated to. That side-effect is what we wanted in this case, and we ignore the value to which $username = <STDIN> evaluates. (It turns out that it evaluates to the value contained in $username after the assignment took place.)

The concepts of statements, expressions and side-effects will become more clear as we continue. When appropriate, we'll point out various expression and discuss what they evaluate to, and indicate what side-effects are of interest to us.