2012-03-22 2 views
6

Я довольно смущен. Я только что получил новую машину разработки, и perl, кажется, ничего не выводит для print команд.Печать: не производит выход

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

ничего не производит в консоли, а testprint становится (пустой файл) 1-прощай.

Даже это ничего не производит:

perl -e "print 'a';" 

Это происходит как для PERL двоичных файлов, которые случаются быть на моей машине. Я в тупике о том, где начать отладку этой проблемы. Есть идеи?

EDIT:

perl -v 

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

и

which perl 

/usr/bin/perl 
+0

Дополнительная информация поможет. Попробуйте: 'perl -V' и' which perl' Также добавьте 'use warnings;' и 'use strict;' в ваш скрипт – Freddo411

+0

Добавлена ​​запрошенная вами информация. – JoshJordan

+0

Какая черта 'perl v5.5.5'? [Никогда не было официального релиза с номером этой версии] (http://search.cpan.org/perldoc?perlhist), и даже если бы это было, это было бы древним.Обновите свою установку 'perl'. – mob

ответ

0

Проблема была не STDOUT отсутствует или перенаправлено из оболочки, а то, что оболочка была создана, чтобы послать возврат каретки без перевода строки при написании приглашения, таким образом переписав весь вывод посланного на одной и ту же линию.

В частности, моя старая версия zsh имела promptcr комплект. См. question 3.23 here для получения дополнительной информации.

+0

(Я на самом деле упомянул об этом.) – ikegami

8

Я считаю, что проблема существует вне Perl. Либо

  • терминала в каком-то необычном состоянии, когда вы запускали скрипт,
  • perl «s родительского процесса перенаправлен perl» выход s от терминала, или
  • perl «s родительского процесса не обеспечивает STDOUT и STDERR для perl.

Возможно, вам удастся собрать больше информации, фактически проверив, возвращена ли ошибка print. (Это всегда озадачивает меня, почему люди не проверяют на наличие ошибок, когда что-то не работает, то, как они ожидают, что это работает.)

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

Вы можете быть в состоянии собрать больше информации, используя strace или как там оно называется в вашей системе. (Посмотрите на write(1 и write(2.)

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

Но те, не должны печатать вообще ничего, если проблема находится вне Perl, поэтому было бы разумно, чтобы попытаться перенаправить вывод в файл, а затем проверки файла и его размер.

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

@JoshJordan Кроме того, попробуйте '\ perl' вместо' perl'. Может быть, у вас есть псевдоним? – ikegami

+1

@JoshJordan. Также попробуйте '' a \ n "' вместо '' a ''. Возможно, вы переписываете свой вывод позже (например, ваше приглашение) – ikegami

+0

Упомянуто для того, чтобы помочь мне найти проблему с strace. Спасибо! – JoshJordan

Смежные вопросы