|
|
|
|
|
by cursork
4531 days ago
|
|
Not completely seriously.. This is why some of us prefer Perl ;) my $a = 1;
my $contrived = sub {
my $a = 2; # new lexical variable $a
$a = 3; # if the my above wasn't there, outer $a would be 3
...
}
say $a; # 1
Explicit declaration of the scope of a variable at initialisation is awesome. 'global' and 'nonlocal' feel weird/less consistent/like a workaround. People are used to creating variables 'on the fly' in Python / CoffeeScript - both break (for a certain value of 'break') certain assumptions in certain circumstances.I've never heard anyone ever complain about perl's lexical 'my'.. It even catches - with a warning - multiple my declarations that will clobber each other. You don't see that in other languages that often. |
|
Explicit declaration of the scope of a variable at initialization leads to unintended global namespace pollution when omitting the declaration is legal and causes the variable to be placed in the global scope, which can be difficult to diagnose because it is usually completely silent until unrelated code happens to interact by using the same name.
From a language design standpoint, this means that you should either require a declaration which determines scope (C or Java), or have local be the default for variables whose scope is undeclared (Python).
> I've never heard anyone ever complain about perl's lexical 'my'
That's because programmers who care about good syntax in their languages don't use Perl.