Born in Campinas, São Paulo state, Perri began his career at Ponte Preta. In 2013 he joined São Paulo FC in a transfer that saw the club face accusations of an improper approach.[1] In March 2015, 17-year-old Perri began training with the first team when Denis, the back-up to veteran goalkeeper Rogério Ceni, suffered a right-shoulder injury with a prognosis of six months.[1]
In January 2019, Perri was loaned to Crystal Palace of the English Premier League until the end of the season.[2] The move was facilitated by the player's possession of an Italian passport through his ancestry.[3] He was completely unused by manager Roy Hodgson, who did not take up the option to make the deal permanent by purchasing 80% of his economic rights for €4.5 million; he was then linked to Sporting CP of Portugal and Galatasaray in Turkey.[4]
Perri did not make his debut until 8 December 2019, when on the last day of the Campeonato Brasileiro Série Aseason, he played the entirety of a 2–1 win at relegated CSA. Having just turned 22, he completed his childhood dream of representing the club.[5] Excluding games for the under-20 team in the Copa Paulista, he played only nine times for the Tricolor, including 30 minutes on 11 March 2020 in a 3–0 home win over LDU Quito in the group stage of the Copa Libertadores when Tiago Volpi injured his hand.[6] He played three games in the Campeonato Paulista in 2021 as his team lifted the title.
On 17 August 2022, Perri signed for Botafogo in the top flight until the end of 2025.[10] He was initially back-up to Gatito Fernández, but was chosen by manager Luís Castro when the Paraguayan veteran suffered an injury in November.[11]
Lyon
On 5 January 2024, Perri signed for Ligue 1 club Lyon on a contract until 30 June 2028.[12] Botafogo received a transfer fee of €3.25 million, in addition to a sell-on clause of 50%.[13]
Perri was back-up to veteran Anthony Lopes in the league season, and made his debut on 7 February 2024 in the last 16 of the Coupe de France, a 2–1 home win over Lille.[14] He remained in goal for the rest of the cup run, which ended with a 2–1 loss to Paris Saint-Germain in the final.[15][16]