sub traverse { my $element = $_[0] ; if (Scalar::Util::blessed ($element)) { if (go_ahead($element)) { my @contents = $element->content_list() ; print "Before: ", @contents, "\n\n" ; for my $child (@contents) { traverse ($child) ; print "Middle: ", $child, "\n\n" ; } print "After: ", @contents, "\n\n" ; } } else { print "Processing a string: " ; $element = curly_quotes($element) ; print $element, "\n\n" ; } }