I suppose I didn't understand that a simple statement can be, the same time BE a compound statement
Something is either a simple statement or a compound statement, not both.
But one can include the other.
- eval { for (1..2) { f(); } }; is a simple statement.
- for (1..2) { f(); } is a compound statement.
- f(); is a simple statement.
And eval is neither a simple nor a compound statement. As I've already said, eval is an operator (like +, and and time), not a type of statement.
Operators can include blocks and thus statements:
- do
- eval
- map
- grep
- sort
- print (e.g. print { ; $fh } $_)
- say
- Subs calls to subs with the & prototype
- Indirect method call (e.g. new { ; "Class" })
- Replacement "expression" of s///e
- Circumfix derefs (e.g. ${ ; \$_ })
- (?{ }) in regex patterns
- (??{ }) in regex patterns