The following prints et:a)(b eb:(a)(b) eteb1:a)(b eteb2: i expected it to print et:a)(b eb:(a)(b) eteb1:a)(b eteb2:(a)(b) were my expectations unexpected? use strict; use warnings; use File::Slurp; use Text::Balanced qw/extract_multiple extract_bracketed extract_tagged/; my $data = '(a)(b)'; et($data); eb($data); eteb($data); sub et { my $data = shift; my @array = extract_multiple( $data, [ sub{extract_tagged($_[0], 'a', 'b', undef,)}, ], undef, 1 ); display('et', @array) } sub eb { my $data = shift; my @array = extract_multiple( $data, [ sub{extract_bracketed($_[0], '()')}, ], undef, 1 ); display('eb', @array) } sub eteb { my $data = shift; my @array = extract_multiple( $data, [ sub{extract_tagged($_[0], 'a', 'b', undef,)}, ], undef, 1 ); display('eteb1', @array); @array = extract_multiple( $data, [ sub{extract_bracketed($_[0], '()')}, ], undef, 1 ); display('eteb2', @array); } sub display { my $sub = shift; print "$sub:"; print $_ for @_; print "\n"; }