【问题标题】:Print: producing no output打印:不产生输出
【发布时间】:2012-03-23 23:07:40
【问题描述】:

我很困惑。我刚买了一台新的开发机器,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-bye(空)文件。

即使这样也不会产生任何结果:

perl -e "print 'a';"

这发生在我机器上的两个 perl 二进制文件中。我很困惑从哪里开始调试这个问题。有什么想法吗?

编辑:

perl -v

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

which perl

/usr/bin/perl

【问题讨论】:

  • 更多信息会有所帮助。尝试:perl -Vwhich perl 另外,将 use warnings;use strict; 添加到您的脚本中
  • 添加了您要求的信息。
  • perl v5.5.5 到底是什么? There has never been any official release with that version number,即使有,也会很古老。升级您的perl 安装。
  • 您的 perl 似乎对您的 STDOUT 感到困惑。其他程序是否按预期工作?这个脚本有效吗:#!/bin/shecho foo
  • 您是否在此处缺少双引号:open FH, ">", "testprint'

标签: perl printing


【解决方案1】:

我相信问题存在于 Perl 之外。要么

  • 运行脚本时终端处于某种异常状态,
  • perl 的父进程将 perl 的输出重定向到远离终端,或者
  • perl 的父进程没有为 perl 提供 STDOUT 和 STDERR。

您可以通过实际检查print 是否返回错误来收集更多信息。 (这总是让我感到困惑,为什么人们不按照他们期望的方式工作时不检查错误。)

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

您可以使用strace 或您系统上的任何名称来收集更多信息。 (查找write(1write(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

【讨论】:

  • @JoshJordan,另外,试试\perl 而不是perl。也许你有别名?
  • @JoshJordan,另外,试试"a\n" 而不是"a"。您可能正在用以后的输出(例如您的提示)覆盖您的输出
【解决方案2】:

问题不是 STDOUT 丢失或从 shell 重定向,而是 shell 设置为在编写提示时发送不带换行符的回车,从而覆盖发送到同一行的所有输出。

具体来说,我的旧版本zsh 设置了promptcr。请参阅question 3.23 here 了解更多信息。

【讨论】:

  • (其实我已经提过了。)
猜你喜欢
  • 2015-08-18
  • 2018-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多