but I'm not sure what's disturbing about it.
Some people dont like to make decisions. Choice mandates making decisions. So ditherers probably dither more with perl than with more restrictive languages just because of this. Its probably compounded by the fact that often there is little difference between the options, IME the less difference the harder the choice. As I said however I rejoice in the options. Id rather dither occasionally than have to fight the language to do something I want to do.
This is Perl; a statement is a block, yes?
Nope. :-) Read perlsyn: Simple statements and perlsyn: Compound statements. The following is a selection of what seemed to me to be relevent paragraphs.
Perl, a sequence of statements that defines a scope is called a block. Sometimes a block is delimited by the file containing it (in the case of a required file, or the program as a whole), and sometimes a block is delimited by the extent of a string (in the case of an eval).
But generally, a block is delimited by curly brackets, also known as braces. We will call this syntactic construct a BLOCK.
Modifiers are considered to be simple statements, as follows
STMT if EXPR
STMT unless EXPR
STMT while EXPR
STMT until EXPR
STMT foreach EXPR
Whereas compound statements are scoped as follows
if (EXPR) BLOCK
if (EXPR) BLOCK else BLOCK
if (EXPR) BLOCK elsif (EXPR) BLOCK ... else BLOCK
LABEL while (EXPR) BLOCK
LABEL while (EXPR) BLOCK continue BLOCK
LABEL for (EXPR; EXPR; EXPR) BLOCK
LABEL foreach VAR (LIST) BLOCK
LABEL foreach VAR (LIST) BLOCK continue BLOCK
LABEL BLOCK continue BLOCK
The clearest example I can think of is as follows
D:\Development>perl -Mstrict -wle "my $foo=1 if 0; print defined($foo)
+ ? $foo : 'undef'"
undef
D:\Development>perl -Mstrict -wle "if ( 0 ) { my $foo=1 } print defin
+ed($foo) ? $foo : 'undef'"
Global symbol "$foo" requires explicit package name at -e line 1.
Global symbol "$foo" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
So the first example uses a simple statement with a modifier. The my declaration is at the highest scoped level (the eval block that the -e represents). Whereas in the second example the my declaration is scoped to the affirmative block in the if.
neither of us has ever used.)
Heh, or even heard of. :-) And i didnt see your qualifier. Sorry.
The other poster's point that the variety is disturbing is the one I disagree with really. Sorry for any confusion.
Me too. No prob. :-)
--- demerphq
my friends call me, usually because I'm late....
|