2012-03-22 12 views
6

Sono abbastanza confuso. Ho appena ricevuto una nuova macchina di sviluppo, e perl sembra che non stia generando nulla per i comandi stampa.Stampa: nessuna uscita

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

produce nulla nella console, e TestPrint diventa un file di 1-bye (vuoto).

Anche questo produce nulla:

perl -e "print 'a';" 

Ciò si verifica sia per i binari Perl che capita di essere sulla mia macchina. Sono perplesso su dove iniziare il debug di questo problema. Qualche idea?

EDIT:

perl -v 

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

e

which perl 

/usr/bin/perl 
+0

Ulteriori informazioni potrebbero aiutare. Prova: 'perl -V' e' which perl' Inoltre, aggiungi 'use warnings;' e 'use strict;' al tuo script – Freddo411

+0

Aggiunte le informazioni richieste. – JoshJordan

+0

Che diamine è 'perl v5.5.5'? [Non c'è mai stata alcuna versione ufficiale con quel numero di versione] (http://search.cpan.org/perldoc?perlhist) e anche se esistesse, sarebbe stato antico.Aggiorna la tua installazione 'perl'. – mob

risposta

0

Il problema non era STDOUT mancanti o reindirizzato dal guscio, ma piuttosto che il guscio è stato impostato per inviare un ritorno senza una nuova riga quando crei una richiesta, sovrascrivendo tutto output inviato alla stessa linea.

In particolare, la mia versione precedente di zsh era impostata su promptcr. Vedere question 3.23 here per ulteriori informazioni.

+0

(in realtà l'avevo già detto). – ikegami

8

Credo che il problema esiste al di fuori di Perl. In entrambi i

  • il terminale in uno stato insolito durante l'esecuzione dello script,
  • perl 's processo padre reindirizzato perl' s in uscita dal terminal, o
  • s' perl processo genitore non ha fornito una STDOUT e STDERR per perl.

si potrebbe essere in grado di raccogliere ulteriori informazioni in realtà controllando se print restituito un errore. (Mi sconcerta sempre perché la gente non verificare la presenza di errori quando qualcosa non funziona il loro modo si aspettano di lavorare.)

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

Potreste essere in grado di raccogliere più informazioni utilizzando strace o come diavolo si chiama sul tuo sistema. (Cercare write(1 e write(2.)

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

Ma chi deve stampare niente affatto se il problema è al di fuori del Perl, che è il motivo per cui potrebbe essere saggio cercare reindirizzare l'output in un file e quindi esaminare il file e le sue dimensioni.

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

@JoshJordan , Inoltre, provare '\ perl' invece di' perl'. forse avete un alias? – ikegami

+1

@JoshJordan, inoltre, provare ' "\ n"' invece di ' "a"'. siete forse sovrascrivendo l'output con tardi uscita (ad es. il tuo prompt) – ikegami

+0

In aumento per aver aiutato a trovare il problema con strace.Grazie! – JoshJordan

Problemi correlati