use Text::Balanced qw( extract_bracketed ); my $text = q/%%% rick ran errands . sem(1, [ word(1001,rick), word(1002,ran), word(1003,errands), word(1004,'.') ], [ pos(1001,'NN'), pos(1002,'VBD'), pos(1003,'NNS'), pos(1004,'.') ] )./; my ($extracted,$remainder) = extract_bracketed($text,'()');