Abigail wrote:

> Before 5.6, lexical scoped file handles were possible, but everyone
> used globs, and the world didn't stop turning. Collision was so
> infrequent, noone wanted to type the few extra keystrokes. 

Plus the ALL_CAPPED names really stood out, further decreasing
the chance of collision in programs with just one author.  It
just never happened.  3rd-party modules are a different story,
and we were always rather more careful there.

> It's only when autovivifying handles came available everyone
> jumped on the "lexical filehandle" bandwagon.

Indeed.

> It's not worth having a style fight over for.

It's also quite a big job with negligible return value.

I tried to count up uses of lexical vs global handles in the pods.
I didn't consider those that were too hard to easily grep, like 
print, printf, stat, and such.  Here are the numbers:

                    Capped  $dollared       Ratio

    pods 5.13.3       399   111             3.6 to 1
    cookbook v2       359   215             1.7 to 1
    camel v3+         891   163             5.5 to 1

Not all those that are dollared are lexicals, and not all those that are
capped are not localized.  But as a rough measure, it works well enough.

The v3 Camel didn't have autovivving filehandles, as Abigail
points out, which accounts for its somewhat larger ratio.

I figure just leave them be, as they really aren't harming anything, 
and would be quite a pain to change: mere mindless busywork.  I can 
think of many, *much* better uses of that time and effort.

--tom

% tcgrep 
'^\s[^#]*\b(open(dir)?|eof|binmode|getc|get(peername|sock(name|opt))|listen|write|fcntl|ioctl|flock|fileno|close(dir)?|read(line|dir)?|rewinddir|say|seek(dir)?|send|setsockopt|recv|sys(open|read|write|seek)|pipe|connect|accept|socket(pair)?|shutdown|tell(dir)?)\b\s*([({]\s*)?\$'
 *.pod | wc -l

% tcgrep 
'^\s[^#]*\b(open(dir)?|eof|binmode|getc|get(peername|sock(name|opt))|listen|write|fcntl|ioctl|flock|fileno|close(dir)?|read(line|dir)?|rewinddir|say|seek(dir)?|send|setsockopt|recv|sys(open|read|write|seek)|pipe|connect|accept|socket(pair)?|shutdown|tell(dir)?)\b\s*([({]\s*)?\p{Lu}'
 *.pod | wc -l

Reply via email to