With Toulouse and Clermont Auvergne not in action until Monday (AEDT), Castres moved above Lyon into third with a sixth straight win as Benjamin Urdapilleta starred.
Urdapilleta scored the first and last of five home tries and also kicked four conversions and a penalty in a fine individual display.
Yann David, Robert Ebersohn and Marc-Antoine Rallier also crossed, with Perpignan never really in the game despite tries for David Mele and Jean Bernard Pujol.
Meanwhile, Montpellier battled back from 12-0 down to win at Toulon 21-18.
Marcel Van der Merwe and Rhys Webb scored a quick-fire double for the hosts, but that prompted a swift response from Vincent Martin and Montpellier then turned the game on its head in the second half.
Bismarck du Plessis went through and, with just over 10 minutes remaining, Yvan Reilhac followed suit to steal victory.
Elsewhere, Teddy Thomas scored a pair of tries in Racing 92's 34-16 triumph at Grenoble, while Bordeaux prevented Stade Francais from crossing in a 26-12 success.
Jake McIntyre kicked three first-half penalties as Agen downed La Rochelle 19-7.