Perl关于在程序运行过程中重新开启标准输入的问题

遇见问题是,如何程序运行的时候已经将标准输入使用”<“符号或者”|“符合在命令行定向为一个文件。

可是在程序的运行过程中希望从键盘得到输入内容。

因为/dev/tty为当前进程的控制台,STDIN 为当前的标准输入. 如果重定向,例如:

perl script.pl <myfile.txt

STDIN 被指向 myfile.txt, 但是 /dev/tty 仍然来自于控制终端。所有的Unix都是这样,不单单是指这个perl。

那么解决方案:

#!/usr/bin/perl -w
use strict;
$| = 1;
my $stream;
while (<>) {
  $stream .= $_;
}
open STDIN, "/dev/tty" or die;
print "Do you want to process the stream? ";
my $ans = <STDIN>;
chomp $ans;
print "Got '$ans'\n";
print "stream = $stream";
#...
exit;
__END__

测试:

$ echo foo | ./stdin 
Do you want to process the stream? yes
Got 'yes'
stream = foo

发现标准输入重新指向键盘。问题解决。祝君好运。

更多相关文章
  • 本例说明了一个程序在运行的时候,各种变量所保存的位置.因为位置不同,自然,变量的生命周期也各不相同. 代码示例: #include <iostream>using namespace std;int nGNum1;void showStackAddress(){    cout<& ...
  • ■ GHOST运行过程中出现A:\GHOSTERR.TXT错误==============================================================问:GHOST运行过程中出现A:\GHOSTERR.TXT错误!   解答:这是Ghost软件复制数据的过程中读写 ...
  • ionic运行过程中动态切换API服务器地址
    ionic 运行过程中动态切换API服务器地址 keywords: ionic,phonegap,cordova,网络制式,动态切换,变更,API,服务器地址,$resource,localstorage,url 场景.需求 场景 APP以项目的形式提供,一个客户需要部署一套服务器,一个APP,所以 ...
  • 定义 log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生 ...
  • 1.集群启动的时候,从节点的datanode没有启动 问题原因:从节点的tmp/data下的配置文件中的clusterID与主节点的tmp/data下的配置文件中的clusterID不一致,导致集群启动时,hadoop会杀死从节点的datanode进程. 解决方案: a) 将集群关闭; b) 删除你 ...
  • RedHat向管理员提供了非常好的方法,使我们可以在系统运行时更改内核参数,而不需要重新引导系统.这是通过/proc虚拟文件系统实现的./proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改.下面我们以打开内核的 ip转发功能为例说明在系统运行时修改内核参数的两种方法 ...
  • 由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效.但是,当系统重新启动后,原来设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这个文件中,是一个比较好的选择. 首先打开/etc/sysc ...
  • 基础知识零---Java程序运行机制及运行过程
    Java运行机制 Java虚拟机(Java Virtual Machine):Java虚拟机可以理解成一个以字节码为机器指令的CPU:对于不同的运行平台,有不同的虚拟机:Java虚拟机机制屏蔽了底层运行平台的差别,真正实现了“一次编译,随处运行”.   Java垃圾回收(Garbage Collec ...
一周排行