maart@cs.vu.nl (Maarten Litmaath) (12/14/90)
The following code makes perl PL41 dump core on a Sun4 running SunOS 4.0.3c:
--------------------cut here--------------------
sub pipo {
local($x) = @_;
local($i);
if ($x > 2) {
return;
}
for $i (1..5) {
print "i=$i x=$x\n";
&pipo($x + 1);
print "\ti=$i x=$x\n";
}
}
&pipo(0);
--------------------cut here--------------------
Tom Christiansen already discovered (paraphrasing) ``that the foreach
iterator isn't getting properly fixed up for when you recurse.''
He also noticed: ``If you make it a literal array, it works fine.''
This is illustrated in the following example:
--------------------cut here--------------------
sub pipo {
local($x) = @_;
local($i);
local(@L) = 1..5;
if ($x > 2) {
return;
}
for $i (@L) {
print "i=$i x=$x\n";
&pipo($x + 1);
print "\ti=$i x=$x\n";
}
}
&pipo(0);
--------------------cut here--------------------
Oh, in case anyone wonders about the name of the subroutine: `Pipo' is a
famous Dutch clown. So `pipo' is the Dutch variant of `foo' for temporary
files, variables, etc. Another common name: `aap' == monkey/ape.
This free extra piece of information was brought to you by the Usenet
electrons.
--
In the Bourne shell syntax tabs and spaces are equivalent almost everywhere.
The exception: _indented_ here documents. :-(
Does anyone remember the famous mistake Makefile-novices often make?