2012-03-22 7 views
6

Estoy bastante confundido. Acabo de obtener una nueva máquina de desarrollo, y Perl parece no dar salida a nada para los comandos print.Imprimir: no produce salida

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

produce nada en la consola, y TestPrint se convierte en un archivo 1-bye (vacío).

Incluso esto produce nada:

perl -e "print 'a';" 

Esto ocurre tanto para los binarios de perl que resultan ser en mi máquina. Estoy perplejo sobre dónde comenzar a depurar este problema. ¿Algunas ideas?

EDIT:

perl -v 

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

y

which perl 

/usr/bin/perl 
+0

Más información ayuda. Pruebe: 'perl -V' y' which perl' Además, agregue 'use warnings;' y 'use strict;' a su script – Freddo411

+0

Agregó la información solicitada. – JoshJordan

+0

¿Qué diablos es 'perl v5.5.5'? [Nunca ha habido ningún lanzamiento oficial con ese número de versión] (http://search.cpan.org/perldoc?perlhist) e incluso si hubiera, sería antiguo.Actualice su instalación 'perl'. – mob

Respuesta

0

el problema no era STDOUT falta o redireccionado de la cáscara, sino más bien que la cáscara fue configurado para enviar un retorno de carro y sin un salto de línea al escribir un mensaje, sobrescribiendo así toda salida enviada a la misma línea.

Específicamente, mi versión anterior de zsh tenía promptcr conjunto. Consulte question 3.23 here para obtener más información.

+0

(en realidad lo mencioné). – ikegami

8

Creo que el problema existe fuera de Perl. De cualquier

  • el terminal en un estado inusual cuando se ejecutó la secuencia de comandos,
  • perl 's proceso padre redirigido perl' s de salida de la terminal, o
  • perl 's proceso padre no proporcionó una STDOUT y STDERR para perl.

es posible que pueda reunir más información por si en realidad la comprobación print devuelve un error. (Siempre me desconcierta por qué la gente no comprobar si hay errores cuando algo no funciona se forma en que esperan que funcionen.)

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

Usted puede ser capaz de reunir más información mediante el uso de strace o lo que se llama en tu sistema. (Busque write(1 y write(2.)

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

Pero los que debe imprimir nada en absoluto si el problema está fuera de Perl, por lo que podría ser aconsejable tratar redirigir la salida a un archivo y luego examinando el archivo y su tamaño

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

@JoshJordan , También, intente '\ perl' en lugar de' perl'. ¿Tal vez tenga un alias? – ikegami

+1

@JoshJordan, Además, intente '" a \ n "' en lugar de '" a "'. Tal vez esté sobreescribiendo su salida con posterioridad salida (por ejemplo, su mensaje) – ikegami

+0

Upvoted para ayudarme a encontrar el problema con strace. ¡Gracias! – JoshJordan

Cuestiones relacionadas