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.
In reply to Re: Scalar refs, aliasing, and recursion weirdness.
by !1
in thread Scalar refs, aliasing, and recursion weirdness.
by BrowserUk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |