#!/usr/bin/perl -w use strict; use Text::Balanced qw (extract_bracketed); my $text = "In (Madrid) (Spain"; my ($extracted, $remainder, $skipped); my $newtext = ""; for (;;) { ($extracted, $remainder, $skipped) = extract_bracketed($text,'()','[^\(]*'); if ($extracted) { $newtext .= $skipped; $newtext .= $extracted; $text = $remainder; } else { if ($@->{error} =~ /Unmatched opening/) { $remainder =~ s/\(/ /; $text = $remainder; } elsif ($@->{error} =~ /Did not find opening bracket/) { $newtext .= $remainder; last; } else { die "Unexpected text balance error: $@"; } } } print "Now text is: *$newtext*\n";