Commenti Perl su un Mac


1

Sto cercando di eseguire uno script Perl che ho scritto dalla riga di comando. Il codice è:

#!/usr/bin/perl
#open file
open(READFILE,"<prune.txt") || die "Couldn't open file";
#read line
while (<READFILE>)
{
#seperate line into pieces
$txtline = $_;
$txtline =~ m/(\d+)\t([\w\s]+)/i;
#rename file
print("Rename $2 to $1.\n");
#loop
}
close (READFILE);

e quando l'eseguo in Terminal ottengo l'errore: #open: bad interpreter: No such file or directory.


Sembra un problema con lo shebang ( #!/usr/bin/perl); forse terminatore di fine linea sbagliato ?! Controlla se il tuo programma viene eseguito quando lo invochi con perl scriptname.pl.
MP

Risposte:


2

Usa vi per convertire lo script Perl, diciamo perl_script.pl, nel formato file UNIX ( :set ff=unix) come segue:

vi perl_script.pl

Ora in vi, cambia il formato del file in UNIX, salva il file e quindi esci, come in:

:set ff=unix
:wq

Ora esegui la tua sceneggiatura come prima.

Molto probabilmente il problema è che il file è stato creato o convertito in un altro formato diverso dal formato UNIX, forse DOS ( :set ff=dosin vi).

Sembrerebbe che almeno nella mia installazione di Ubuntu Linux 12.04 LRS, i vecchi strumenti dos2unixe unix2dosnon siano installati di default. Questo sarebbe stato quello che avrei suggerito se fossero prontamente disponibili - quindi l'hack sopra per farti andare. Dal momento che non sono attualmente disponibili, ecco un modo piuttosto semplice per ripristinarli:

$ sudo apt-get install tofrodos
$ sudo ln -s /usr/bin/fromdos /usr/bin/dos2unix
$ sudo ln -s /usr/bin/todos /usr/bin/unix2dos

Ora, per vedere come usare dos2unix, eseguire un man fromdos, e per vedere come usare unix2dos, eseguire un man todos.

Aggiungere quanto segue a uno dei file di avvio della shell per codificare il proprio dos2unxe unix2doscioè il proprio .bashrcfile:

dos2unix(){
  tr -d '\r' < "$1" > t
  mv -f t "$1"
}
dos2unix file

unix2dos(){
  sed -i 's/$/\r/' "$1"
}
unix2dos file

Poiché è stato più semplice eseguire quest'ultima codifica, questo è quello che ho fatto per il mio server OSX, piuttosto che capire quale pacchetto trovare e portare su OSX.


Sì, ha a che fare con unix. Uso TextWrangle e tutto quello che dovevo fare è impostare le codifiche su Unix in fondo.
traisjames

-1

Intendevi avere il carattere "<" nel nome del file? Quasi tutti i bug come questo hanno a che fare con il tentativo di accedere a un file con un refuso nel nome.


No, ecco come perl apre un file per la lettura
traisjames,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.