{ package RecMy ; use strict ; sub rec { my $n = shift ; return if !$n ; rec( --$n ) ; my $local = "[$n] set" if ($n/3) !~ /\./ ; $local .= ' append' ; print "<$n> $local\n" ; } for(1..5) { print "--------------------- $_\n" ; rec(4); } } #### --------------------- 1 <0> [0] set append <1> append <2> append <3> [3] set append --------------------- 2 <0> [0] set append <1> append append <2> append append <3> [3] set append --------------------- 3 <0> [0] set append <1> append append append <2> append append append <3> [3] set append --------------------- 4 <0> [0] set append <1> append append append append <2> append append append append <3> [3] set append --------------------- 5 <0> [0] set append <1> append append append append append <2> append append append append append <3> [3] set append #### --------------------- 1 <0> [0] set append <1> append <2> append <3> [3] set append --------------------- 2 <0> [0] set append <1> append <2> append <3> [3] set append --------------------- 3 <0> [0] set append <1> append <2> append <3> [3] set append --------------------- 4 <0> [0] set append <1> append <2> append <3> [3] set append --------------------- 5 <0> [0] set append <1> append <2> append <3> [3] set append #### ## changed from (bugged): my $local = "[$n] set" if ($n/3) !~ /\./ ; ## to (fine): my $local ; $local = "[$n] set" if ($n/3) !~ /\./ ; #### ... if ($n/3) !~ /\./ ;