2015-04-10 16 views
82

Ho appena scritto un codice python test in test.py, e sto lanciando come segue:Perché non ricevo errori di sintassi quando eseguo il mio script Python con Perl?

perl test.py 

Dopo un po 'ho capito il mio errore. Dico "dopo un po '", perché il codice Python viene effettivamente eseguito correttamente, come se nell'interprete Python!

Perché il mio Perl interpreta il mio Python? test.py assomiglia a questo:

#!/usr/bin/python 

...Python code here... 

È interessante notare che, se faccio il contrario (cioè chiamare python something.pl) ottengo una buona dose di errori di sintassi.

+6

che sto indovinando che è a causa del '#!' All'inizio del file. Effettivamente se rimuovo la she-bang, sto ottenendo il comportamento previsto. Non è una cattiva idea dal punto di vista della sicurezza, comunque? – Dacav

+7

No. Il punto del percorso shebang per specificare un interprete. Se non ti fidi del codice da eseguire, non dovresti eseguirlo in primo luogo. – Sobrique

+0

@Sobrique, punto giusto ... c'è ancora qualcosa di intrinsecamente strano qui. – Dacav

risposta

112

Da perlrun,

Se la linea #! non contiene la parola "perl", né la parola "indir" il programma prende il nome dal #! viene eseguito al posto dell'interprete Perl. Questo è leggermente bizzarro, ma aiuta le persone su macchine che non lo fanno #!, perché possono dire a un programma che il loro SHELL è /usr/bin/perl, e Perl invierà quindi il programma all'interprete corretto per loro .

Per esempio,

$ cat a 
#!/bin/cat 
meow 

$ perl a 
#!/bin/cat 
meow 
+31

Wow. Parla delle tue caratteristiche oscure. Ho usato Perl per più di 20 anni e non avevo idea che lo facesse. – cjm

+4

Ho iniziato a utilizzare Perl v4 su DOS, VMS e Solaris. Le funzioni agnostiche/di bridging del sistema operativo come questo hanno reso la vita multipiattaforma molto più semplice. – tjd

+0

Trovo la documentazione piuttosto bizzarra di per sé. Perché diavolo "sulle macchine che non fanno' #! '" Ci sono script che iniziano con '#!' In primo luogo? Non penso di avere '/ usr/bin/perl' (e dubito che su macchine menzionate sarebbe in realtà quel percorso) dato che' SHELL' sarebbe divertente. –

Problemi correlati