2012-03-22 18 views
6

Jestem dość zdezorientowany. Właśnie dostałem nową maszynę programistyczną, a perl wydaje się nie wyświetlać niczego dla poleceń print.Drukuj: nie produkuje wyjścia

#!/usr/bin/perl 
use warnings; 
use strict; 
print "A"; 
print STDOUT "B"; 
print STDERR "C"; 
open FH, ">", "testprint'; 
print FH "D"; 
close FH; 

Produkuje nic w konsoli, a testprint staje plik 1-bye (pusty).

Nawet ta produkuje nic:

perl -e "print 'a';" 

ta występuje zarówno perl plików binarnych, które zdarzają się na moim komputerze. Zastanawiam się, gdzie rozpocząć debugowanie tego problemu. Jakieś pomysły?

EDIT:

perl -v 

This is perl, v5.8.8 built for x86_64-linx-thread-multi 

i

which perl 

/usr/bin/perl 
+0

Więcej informacji może pomóc. Spróbuj: 'perl -V' i' który perl' Dodaj też do skryptu 'use warning;' i 'use strict;'. – Freddo411

+0

Dodano żądane informacje. – JoshJordan

+0

Co do cholery jest "perl v5.5.5"? [Nigdy nie było oficjalnego wydania z tym numerem wersji] (http://search.cpan.org/perldoc?perlhist), a nawet gdyby tak było, byłoby to starodawne.Uaktualnij instalację 'perl'. – mob

Odpowiedz

0

Problemem było nie STDOUT brakuje lub przekierowane z powłoki, ale raczej, że powłoka została ustalona na wysłanie powrotu karetki bez nowej linii pisząc wiersz, więc nadpisanie wszystkich danych wysyłanych do tej samej linii.

W szczególności moja stara wersja zsh miała zestaw promptcr. Aby uzyskać więcej informacji, patrz question 3.23 here.

+0

(Tak naprawdę wspomniałem.) – ikegami

8

Wierzę, że problem istnieje poza Perl. Albo

  • terminal w jakiś niezwykły stan, kiedy uruchomiono skrypt
  • perl 's proces nadrzędny przekierowany perl jest wyjście od terminala lub
  • perl „s proces macierzysty nie zapewnić STDOUT i STDERR dla perl.

Być może będziesz w stanie zebrać więcej informacji, sprawdzając, czy print zwrócił błąd. (Zawsze zdumiewa mnie, dlaczego ludzie nie sprawdzić błędy, gdy coś nie działa, to sposób, w jaki można oczekiwać, że do pracy.)

perl -we'print("a") or die("Can'\''t print: $!\n");' 

Możesz być w stanie zebrać więcej informacji za pomocą strace lub cokolwiek to się nazywa w twoim systemie. (Sprawdzić write(1 i write(2.)

strace perl -we'print("a") or die("Can'\''t print: $!\n");' 

Ale te powinny w ogóle drukować nic, jeśli problem jest poza Perl, dlatego może być mądry, aby spróbować przekierowując wyjście do pliku, a następnie sprawdzenie pliku i jego rozmiar.

perl -we'print("a") or die("Can'\''t print: $!\n");' 1>out 2>err 
+1

@JoshJordan Spróbuj również '\ perl' zamiast' perl' Może masz alias? – ikegami

+1

@JoshJordan, Wypróbuj także '" a \ n "' zamiast '" a "' Być może nadpisujesz swoje wyniki później wynik (np. Twoja prośba) – ikegami

+0

Wznawiana za pomoc w odnalezieniu problemu dzięki strace. Dzięki! – JoshJordan