Il semble que cela soit dû au fait que Linux (contrairement à BSD) ne transmet qu'un seul argument à la commande shebang (dans ce cas, env).
Cela a été longuement discuté sur StackOverflow.
Trouvé via le commentaire de @rampion :
Ce qui se passe, c'est que le noyau traite les deux premiers caractères du fichier à la recherche de #!. Si ceux-ci sont trouvés, il ignore tous les caractères d'espacement à la recherche d'un caractère non-espace et extrait le chemin de l'interpréteur qui doit être un véritable exécutable et non un autre script, bien que Linux étende cela pour permettre le traitement de script récursif. Après avoir trouvé cela, il passe au premier caractère non-espace où il passe au caractère de nouvelle ligne suivant et le transmet comme un seul argument à la commande. Il n'y a pas de traitement "shell" des guillemets ou d'autres métacaractères. C'est très simple et c'est la force brute. Par conséquent, vous ne pouvez pas être fantaisiste avec les options là-bas. Vous obtenez exactement un espace blanc d'argument inclus et 'perl -w' est ce que le noyau voit ici et transmet.
Source :http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html