[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]
Re: Localization method of $1
On Jan 15, Peter Scott said:
> sub pref { \$_[0], " = ", shift || '(undef)', "\n" }
> 
> $_ = "abc";
> print   "Before setting:  ", pref $1;
> s/(ab)/bar($1)/e;
> print   "After s///:      ", pref $1;
> 
> sub bar {
>    $_[0] =~ /(b)/;
>    print "Inside /e sub:   ", pref $1;
>    print "Original \$1 now: ", pref $_[0];
> # Note: attempt to assign to $_[0] here generates
> # "Modification of a read-only value"
> }
That's because $_[0] is /really, truly/ $1.
  @_ = ("new thing") ;
Will not affect $1.  Assigning to a specific index of @_ will modify the
variable that was passed to the function in that position (see the code
below).
Elements of @_ are aliases to the actual variables.  If, however, you
assign to @_ by a means other than specific indices, this bond is broken.
  $var = 1;
  foo($var);
  sub foo {
    print "$_[0], $var\n";
    $var = 2;
    print "$_[0], $var\n";
    $_[0] = 3;
    print "$_[0], $var\n";
    @_ = (4);
    print "$_[0], $var\n";
    $_[0] = 5;
    print "$_[0], $var\n";
    $var = 6;
    print "$_[0], $var\n";
  }
  1, 1
  2, 2
  3, 3
  4, 3
  5, 3
  5, 6
This is with Perl 5.005_02, just so you know.
-- 
  MIDN 4/C PINYAN, USNR, NROTCURPI     http://www.pobox.com/~japhy/
  jeff pinyan: japhy@pobox.com     perl stuff: japhy+perl@pobox.com
  "The Art of Perl"               http://www.pobox.com/~japhy/book/      
  CPAN ID: PINYAN  http://www.perl.com/CPAN/authors/id/P/PI/PINYAN/
  PerlMonth - An Online Perl Magazine     http://www.perlmonth.com/
- Follow-Ups from:
 - 
Peter Scott <Peter@PSDT.com>
 
- References to:
 - 
Peter Scott <Peter@PSDT.com>
 
[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index][Thread Index][Top&Search][Original]