Sieht so aus, weil Linux (im Gegensatz zu BSD) nur ein einziges Argument an den shebang-Befehl übergibt (in diesem Fall env).
Dies wurde ausführlich auf StackOverflow diskutiert.
Gefunden über den @rampion-Kommentar:
Was passiert ist, dass der Kernel die ersten beiden Zeichen der Datei verarbeitet und nach #! sucht. Wenn diese gefunden werden, überspringt es alle Leerzeichen und sucht nach einem Nicht-Leerzeichen und extrahiert den Interpreter-Pfad, der eine echte ausführbare Datei und kein anderes Skript sein muss, obwohl Linux diesen erweitert, um eine rekursive Skriptverarbeitung zu ermöglichen. Nachdem es das gefunden hat, springt es zum ersten Nicht-Leerzeichen, wo es von dort zum nächsten Zeilenumbruchzeichen geht und dieses als einzelnes Argument an den Befehl weitergibt. Es gibt keine Shell-Verarbeitung von Anführungszeichen oder anderen Metazeichen. Es ist alles sehr einfach und rohe Gewalt. Daher kann man sich dort nicht mit Optionen austoben. Man bekommt genau ein Argument mit Leerzeichen und 'perl -w' ist das, was der Kernel hier sieht und weitergibt.
Quelle:http://lists.gnu.org/archive/html/bug-sh-utils/2002-04/msg00020.html