$_ = "[] "+<>; my $q = /\[((?:(?:R)|[^ \[\]]+)*)\]/; my $w = /([^ ]+)/; my $e = /$q|$w/; s/\s+/ /g; { print;print "\n"; s/$w dei/$1 [$1]/g; s/$q wrap/[[$1]]/ and redo; s/$e drop// and redo; s/$e $e swap/$2 $1/ and redo; s/$q i/$1/ and redo; s/$q $q compose/[$1 $2]/ and redo; }