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 ...
一周排行
  • DHCP动态主机的简单配置
     dhcp :维基百科的介绍动态主机设置协议(Dynamic Host Configura ...
  • vc维的解释
    在做svm的时候我们碰到了结构风险最小化的问题,结构风险等于经验风险+vc置信范围,当中的 ...
  • Gentoo源码安装
              livecd / # reboot最后取出光盘.到此完成Gentoo ...
  • Liunx的安装详解
     我们都知道linux系统,可是一般人都不怎么用,因为它不适合我们普通用户去使用,它没有w ...
  • 信息,也就是说只是备份数据文件到此刻的信息为之.
  • 日期:2015/11/4 - 2015/11/17 time 0主机:e01, n33, n34目的:再探oVirt-配置一个2节点的ovirt环境操作内容:一.基础操作 1.资源 ovirt engine: ...
  • 执行visudo命令来编辑/etc/sudoers,visudo会检查语法.如果在生产环境中,需要编辑的配置较多,可以直接修改sudoers配置文件,但是保存后,要执行#visudo-c检查语法如果是centos5. ...
  • 超爆笑口误1. 碗掉下来,天大个疤 2.一次文艺晚会,主持人上台报幕:下面请欣赏:新疆歌舞,掀起你的头盖骨!毛骨悚然!!!!! 3.老虎不发猫,你当我是病危呀! 4.上高中时,课堂纪律混乱,老师一怒之下揪起XXX,说 ...
  • 我想很多朋友使用母板或控件时遇到一个同样的问题就是,这些被多个不同目录下的页面引用的公共区里,涉及到的相对路径问题.先看下下面的简单代码:Default.master母板在根目录:<%@ Master Lang ...
  • 在Sql Server 2008/2005 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决,如果不行参照方 ...