The 24-year-old Perron played in 57 regular-season games last season for the Blues, collecting 21 goals and 21 assists. He missed the first 25 games of the season because of concussion-like symptoms but still finished second on the team in goals and fifth in points and assists.
"I love the city of St. Louis and I'm thrilled to play in front of these awesome fans for another four years," Perron said in a statement by the team. "We had an excellent regular season but we all feel this team has so much more to accomplish."
In five NHL seasons, Perron has 74 goals, 99 assists and 188 penalty minutes in 292 games. He was a first-round draft pick (26th overall) of St. Louis in 2007.
"We're excited to have David in the fold for the next four years," Blues general manager Doug Armstrong said. "He made a great comeback by scoring 21 goals in 57 games (last season). We're comfortable with his health, and we're confident that he will continue to build on his offense."