2011-10-13 9 views
12

Próbuję uruchomić następujące w systemie Windows z 5.14.2Dlaczego otrzymuję komunikat "Nie mogę znaleźć terminatora ciągu" "" w dowolnym miejscu przed EOF w linii -1 ", gdy próbuję uruchomić jednolinijkową wersję Perla w systemie Windows?

C:\Perl>perl -e 'print "Hello World \n"' 
Can't find string terminator "'" anywhere before EOF at -e line 1.

Czego mi brakuje?

+0

jeśli używasz Perl 5.10+, użyj' -E' opcja zamiast "-e", która włącza nowe funkcje, między innymi 'say', która jest' print', ale z domyślnym znakiem nowej linii na końcu. 'perl -E" say 'hello world' "' –

+0

To doesn ' t pracy @Eric.Nie w tym przypadku.Ponieważ problem tutaj jest znaki cudzysłowu, które muszą być odwrócone. (Zastanawiam się, czy to działa dla Ciebie ...) – Apostolos

Odpowiedz

25

Brakuje porządnej powłoki z rozsądnymi i dobrze zdefiniowanymi regułami cytowania. W systemie Windows tylko podwójny cudzysłów jest uważany za cytat, a reguły ucieczki są słabo zdefiniowane i niespójne. Wypróbuj:

perl -e "print qq{Hello World \n}" 

Zdecydowanie odradzam cokolwiek innego niż najprostsze jednolinijki w systemie Windows. (Kolejny problem z jednoosobowymi wersjami systemu Windows polega na tym, że powłoka systemu Windows nie rozwija symboli wieloznacznych. Jeśli użyjesz *.txt w wierszu poleceń, będzie szukał pliku o nazwie dosłownie: *.txt. Uruchomisz go później.)

w systemie Windows, co wpisane jest równoznaczne z:

perl -e "'print" "Hello World \n'" 

Oznacza to, że kod Perl próbuje wykonać jest 'print z @ARGV zawierającym pojedynczy łańcuch Hello World \n'. (To nie jest nowa linia, to jest ukośnik odwrotny, po którym następuje n).

+3

Właściwie, myślę, że jesteś zawyżanie.Nigdy nie czułem się zbyt kaleką pisanie jednolinijkowych w systemie Windows: – TLP

+1

W systemie Windows jest zadanie aplikacji (a nie zadanie powłoki), aby przeanalizować wiersz poleceń. Problem z OP wygląda na to, że przedstawia błąd w wydaniu Perla dla Windowsa. –

+0

@HarryJohnston, właściwie oba. Najpierw powłoka analizuje wiersz poleceń (szukając rur, przekierowania itp.). Następnie aplikacja analizuje wiersz polecenia. (Zwykle jest to biblioteka środowiska wykonawczego aplikacji C/C++, która je analizuje.) Dlatego linia poleceń systemu Windows to taki bałagan; reguły parsowania nie są dobrze zdefiniowane, a różne biblioteki C parsują trochę inaczej. – cjm

4

W systemie Windows cudzysłowy należy odwrócić. Tak więc, zamiast:

C:\Perl>perl -e 'print "Hello World \n"' 

powinno być:

C:\Perl>perl -e "print 'Hello World \n'" 

(przypisanie Learning Perl, 6. wydanie, str 295).

+1

To drukuje "Hello World \ n", \ n został wydrukowany jako is a not a Nowa linia. – rodee

2

znalazłem też to zadziałało. Używam Windows 7 za pomocą c:\Windows\system32\cmd.exe

perl -e "$a=2; print(\"$a \n \");" 

Używam ukośnik ucieczki w moim oświadczeniu druku, aby uzyskać cytaty pojawiają się \”

Powiązane problemy