let's try a proposal as
thought experiment and discuss it
short version:*
- basically only file and function scope are automatic.
- all deeper nested scopes need to be explicit. Implicit effects there - if allowed - belong to the surrounding file/function scope.
- nested subs are tricky
1. Any assignment to an undeclared new variable implies a "implicit" my when in
- file-scope (outside any sub)
$x = 1 ==> my $x =1
- function-scope
sub foo { $x = 1; ... } ==> sub foo { my $x =1; ... }
- loop-header but NOT body
for $x (@a) {...} ==> for my $x (@a) {...}
- some commands like open *
open $fh, ... ==> open my $fh, ...
2. explicit
my are still optionally allowed,
our and
state keep their semantics
3. No hoisting, a variable accessed before an implicit my still belongs to the upper scope and needs to be declared there
4. loop-bodies and naked blocks (technically the same) follow the old rules
5. ( ??? ) nested/anonymous subs are tricky, when it comes to closed over vars
- if they follow rule 1, than we need a declaration alike Py's nonlocal ... maybe its or over to mark vars avoiding implicit my
- if they are exempt from rule 1 and rather act like 4, we get a break in symmetry
- another solution would be a new keyword fun to create a sub with auto-mine while keeping sub explicit.
6. (
??? ) functional blocks like in
map {BLOCK} are technically anonymous subs °
7. (
??? ) class-variables are a current issue in proposed new OOP models.
8. special global vars are exempt from implicit my.
9. Last but not least automine activates strict
So ...
- Did I forget a case?
- Do you need examples?
- Please inform yourself about closures before judging.
°) actually not in the case of map and grep but for all of List::Util , try return to see the difference
*) updated
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
|
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.