In a message dated Fri, 12 Apr 2002, Luke Palmer writes:
> Couldn't you do it with old-style Perl5 subs?
>
> sub printRec {
>   my $p = chomp(shift // $_);
>   print ":$_:\n"
> }
>
> Or am _I_ missing something?

That definitely won't work (aside from the $p/$_ swap which I assume is
unintentional), because $_ is now lexical.  If my understanding is correct
and $_ is always the topic, and the first parameter of any block is always
the topic, that would make your code somewhat equivalent to:

  sub printRec {
    my $p;
    if (defined @_[0]) {
      $p = shift;
    } else {
      $p = @_[0];
    }
    print ":$p:\n";
  }


Or is the topic of a block mutable (i.e., will a shift cause the topic to
shift as well)?  If so, I guess your code is actually is equivalent to:

  sub printRec {
    my $p = chomp(shift // shift);
    print ":$p:\n";
  }

Either way, bizarre, no?  What I *think* you meant to say is:

  sub printRec {
    my $p = chomp(shift // caller.MY{'$_'});
    print ":$p:\n"
  }

which should certainly work, it just makes my skin crawl--vestiges of
Perl 4 still coming to bite us, or something.

Trey

Reply via email to