Uczę się Perla z pomocą niektórychtutoriale internetowe, a na ogół wszystko idzie dobrze i wszystko działa bezproblemowo. Jednak nie mogę robić JAKICHKOLWIEK komentarzy, albo program nie będzie działał poprawnie. Na przykład następujący kod:
#eee
print "Estimation of Pi";
będzie działał, ale niczego nie drukuje, a tylko to
print "Estimation of Pi";
uruchamia i drukuje to, co jest przeznaczone.
Co ja robię źle? W ogóle tego nie rozumiem.
Ponadto, na marginesie, do czego jest potrzebny #! / Usr / bin / perl? Moje programy wydają się działać bez tego (i jako komentarz, programy nie działają z nim)
Odpowiedzi:
3 dla odpowiedzi № 1Podejrzewam, że twój plik nie zawiera tego, co myślisz. Być może masz CR zamiast LF lub CRLF.
>perl -e"binmode STDOUT; print qq{#eeerprint qq{foo\n}}" | perl
>perl -e"binmode STDOUT; print qq{#eeenprint qq{foo\n}}" | perl
foo
>perl -e"binmode STDOUT; print qq{#eeernprint qq{foo\n}}" | perl
foo
Sprawdź swój plik za pomocą edytora szesnastkowego lub, co gorsza, za pomocą następującego polecenia:
perl -0777nE"BEGIN { binmode STDIN } say join " ", unpack "(A2)*", unpack "H*", $_" < file
#!
to koncepcja uniksowa. Windows go nie używa, ale Perl będzie szukał opcji wiersza poleceń w tej linii. Na przykład:
#!perl -w
print undef;
1 dla odpowiedzi nr 2
To brzmi dość dziwnie. Jak wykonujesz ten program? Jeśli uruchamiasz ten program w systemie, który oczekuje linii znakowych w stylu Windows, ale tworzy go za pomocą edytora tekstu, który generuje znaki nowej linii w stylu uniksowym, które mogłyby spowodować problem. Spróbuj upewnić się, że edytor tekstu jest skonfigurowany do używania znaków nowej linii w stylu Windows jeśli jesteś w oknach.
The #!/usr/bin/perl
nie jest komentarzem. To się nazywa linia shebang, aw systemach uniksowych, jeśli wykonujesz plik tekstowy (to znaczy ty chmod +x filename.pl
a następnie wykonaj to za pomocą ./filename.pl
zamiast perl filename.pl
), system szuka tego na pierwszej linii i jeśli go znajdzie, przekazuje cały plik do narzędzia znajdującego się w tym pliku, w tym przypadku /usr/bin/perl
. Jest przydatny tylko w systemach uniksowych i tylko wtedy, gdy chcesz, aby skrypt był wykonywalny.
Jako kolejna wskazówka - perl używa bufora wyjściowego do wszystkiego, co zostało przekazane print
. Oznacza to, że jeśli ty print
coś, co nie kończy się na nowej linii (n
), jest trzymany w buforze, aż do kolorubufor (zwykle nie jest to konieczne w perlu), wypisz coś zawierającego znak nowej linii lub zamknij program. Możesz zastąpić tę funkcję, dodając $| = 1;
do twojego programu, ale najlepiej jest po prostu kończyć wiadomości za pomocą znaków nowej linii, w przeciwnym razie ekran będzie się bałagan.
1 dla odpowiedzi nr 3
Może być tak, że wykonujesz skrypt jako skrypt powłoki, a nie skrypt Perla i zdarzy ci się mieć skrypt print
polecenie w twoim $PATH
. Zakłada się, że jesteś w środowisku podobnym do Uniksa. (Jak się okazuje, nie jesteś; jesteś w Windows. Ale ta odpowiedź może być przydatna dla innych)
Co się stanie, jeśli się zmienisz print
do echo
? Od echo
nie jest poprawnym poleceniem Perla, jeśli nadal działa, przypuszczam, że ma rację.
Pierwsza linia twojego skryptu powinna być
#!/usr/bin/perl
Ten „shebang” mówi systemowi, jak wykonać skrypt po uruchomieniu go po nazwie. Lub możesz go uruchomić perl
jawnie:
perl ./script_name