in reply to Scalar refs, aliasing, and recursion weirdness.
Rather interesting behavior. If you merely use @_'s magic aliasing, the results seem even stranger.
#! perl -slw use strict; sub recurse { print \$_[0]; print ">> '$_[ 0 ]'"; if( length $_[ 0 ] ) { recurse( substr( $_[ 0 ] , 1, -1 ) ); $_[0] = " ( $_[0] ) "; } print "<< '$_[0]'"; return; } my $str = 'abcdefghij'; recurse $str; print $str; __END__ SCALAR(0x8126a70) >> 'abcdefghij' LVALUE(0x8126bc0) >> 'bcdefghi' SCALAR(0x812a454) >> 'cdefgh' SCALAR(0x812a520) >> 'defg' SCALAR(0x812a5ec) >> 'ef' SCALAR(0x812a6b8) >> '' << '' << ' (' << ' ( d' << ' ( c (' << ' ( b ( c' << ' ( a ( b ( c ( ) d ) ( ) ef ) ghij ) ' ( a ( b ( c ( ) d ) ( ) ef ) ghij )
Perhaps this is a bug in the magic lvalue-ness of substr? It doesn't seem to be verifying the length of an lvalue on an lvalue, thus the shifting of the terms that appear on the right.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Scalar refs, aliasing, and recursion weirdness.
by BrowserUk (Patriarch) on Feb 04, 2005 at 23:33 UTC | |
by !1 (Hermit) on Feb 04, 2005 at 23:38 UTC |