use Text::Balanced; my $str = " ['listliteral',['ListLiteral',['../classSPL_1_1Operator_1_1Instance_1_1ExpressionTree_1_1ListLiteral.html',1,'SPL::Operator::Instance::ExpressionTree']]]"; @matches = Text::Balanced::extract_bracketed( $str, '[]' ); foreach (@matches) { print "$_\n"; }