Aaron Sherman
Sat, 26 Mar 2005 06:59:34 -0800
On Sat, 2005-03-26 at 00:27 -0800, Larry Wall wrote: > $$ is now $*PID. ($$foo is now unambuous.) > > $0 is gone in favor of $*PROGRAM_NAME or some such.
You know, Java did one thing in this respect that I liked, and managed
to do it in a way that I couldn't stand. The idea of program as object
was nice, but they made the programmer manage it, which was really kind
of silly.
If you think of the OS-level shell around a Perl interpreter as an
object, and make perl manage that for you, then this falls out rather
nicely:
$*PID := $*PROC.pid;
$*PPID := $*PROC.ppid;
$*PROGRAM_NAME := ~$*PROC;
Perhaps even some often-used data could be shoved in there:
$life = time() - $*PROC.start_time;
In fact, it seems like a good place for any OS-level globals:
$*IN := $*PROC.pio_in // $*PROC.stdin;
If we consider $*PROC to be the invocant of the implicit "main", then:
say "I am number {.pid}, who is number 1?";
works just fine in global context. This also gives you a nice simple way
to drill down into your interpreter / runtime / VM / whatever state:
say "I'm {.name} running under {.interp.name}";