Re: Auto My?

2004-12-19 Thread chromatic
On Sun, 2004-12-19 at 20:25 -0600, Rod Adams wrote:

> One of the other reasons in favor of the idea was aesthetic.
> 
> # stuff which declares $x, $z, and $q
> 
> $x = 4;
> my $y = 7;
> $z = 12;
> my $r = 4543;
> $q = 121;
> 
> compared to:
> 
> # stuff which declares $x, $z, and $q
> 
> $x = 4;
> $y = 7;
> $z = 12;
> $r = 4543;
> $q = 121;
> 
> With a fixed width font, like all code editors use, all the =' like up, 
> and I can quickly scan the var names to get to the one I want to change 
> at that moment.

If you align the equals signs yourself with spaces, you can use variable
names of different lengths (and possibly improved meaningfulness in
actual factual code) too.

I'm only half-joking.  Vertical alignment makes a dramatic difference to
readability.

-- c



Re: Auto My?

2004-12-19 Thread Luke Palmer
James Mastros writes:
> Juerd wrote:
> >Just typing "my " before the first use of a variable isn't hard, and it
> >makes things much clearer for both the programmer and the machine. 
> Does this imply that it's now possible to type C, and 
> declare @foo?  In the current perl, this doesn't work -- it's a syntax 
> error.  It'd certainly make many constructs easier.

That looks weird to me.  But as Rod points out, it can be useful with
hashes. 

In Perl 5 you can do the hackish:

(\my @foo)->[23] = 42;

Luke


Re: Auto My?

2004-12-19 Thread Rod Adams
James Mastros wrote:
Juerd wrote:
Just typing "my " before the first use of a variable isn't hard, and it
makes things much clearer for both the programmer and the machine. 
Does this imply that it's now possible to type C, 
and declare @foo?  In the current perl, this doesn't work -- it's a 
syntax error.  It'd certainly make many constructs easier.
I see why that's an error. It can be very confusing In literal 
fashion you are attempting to make the 24th element of @foo lexical, and 
having some elements of @foo have different scope from the rest is a bad 
idea.

However, I have also been bitten by that rather frequently, though with 
a different construct. Typically it's with hash slices:

my @[EMAIL PROTECTED] = @[EMAIL PROTECTED]; # ERROR!
my %newhash;
@[EMAIL PROTECTED] = @[EMAIL PROTECTED]; # Okay, but not as convienent.
This was part of the reason I spawned this thread. But it was also due 
to being in the middle of trying to write some decent quality code under 
a heavy time pressure, and noticed that >50% of my lines had a 'my' on 
them. It's typically not that high of a percentage, but when you are 
creating lots of small utility routines, declaring all your lexicals can 
be a significant part of the task. I added to this the observation that 
lexical variables are significantly more common than non-lexicals, and 
thought out loud as to why I was doing more work for the common case 
than the uncommon case, in a language that generally doesn't have that 
problem.

One of the other reasons in favor of the idea was aesthetic.
# stuff which declares $x, $z, and $q
$x = 4;
my $y = 7;
$z = 12;
my $r = 4543;
$q = 121;
compared to:
# stuff which declares $x, $z, and $q
$x = 4;
$y = 7;
$z = 12;
$r = 4543;
$q = 121;
With a fixed width font, like all code editors use, all the =' like up, 
and I can quickly scan the var names to get to the one I want to change 
at that moment. Yes, I could have added a 'my ($y, $r);' to the front of 
the list, but that's adding another statement to the mix, same as the 
hash slice above, adding considerably more weight to 'my' than just 
three keystrokes (m - y - space).

However, given the strong opposition (with merits) to this in other 
responses, I am willing to live with it the P5 way. Just seemed like 
autolexicals was rather DWIMish.

Another facet of this discussion comes into account when also specifying 
type.

from S9:
 my bit @bits;
 my int @ints;
 my num @nums;
 my int4 @nybbles;
 my str @buffers;
 my ref[Array] @ragged2d;
 my complex128 @longdoublecomplex;
Wouldn't this be much better as:
 bit @bits;
 int @ints;
 num @nums;
 int4 @nybbles;
 str @buffers;
 ref[Array] @ragged2d;
 complex128 @longdoublecomplex;
Given that most of the stated reservations had to deal with explicit 
declaration better defining scope, what is wrong with drooping the my in 
this case?

-- Rod Adams


Re: Auto My?

2004-12-19 Thread James Mastros
Juerd wrote:
Just typing "my " before the first use of a variable isn't hard, and it
makes things much clearer for both the programmer and the machine. 
Does this imply that it's now possible to type C, and 
declare @foo?  In the current perl, this doesn't work -- it's a syntax 
error.  It'd certainly make many constructs easier.

	-=- James Mastros