/ / Komentarze w Perl5 powodują awarię programu? - perl, komentując

Komentarze w Perl5 powodują awarię programu? - perl, komentując

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 № 1

Podejrzewam, ż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