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 ...
一周排行
  •  之前的定位可能主要为了研究底层及一些较复杂的问题上,而忽略了一些初学的朋友.导致他们可能一进来就有点“望而生畏”的感觉(自诩了哈,拍砖!).应怪兽群里兄弟及一些朋友的建议,同时也为了把自己的经验及编程方面的一些想法 ...
  • 解决Ubuntu 12.04 使用`make menuconfig`配置Linux 内核时,出现缺少'ncurses-devel'库支持.*** Unable to find the ncurses librarie ...
  • 返回一个二维整数数组中最大子数组的和
    题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负 ...
  • 安装KVM虚拟机并管理项目需求:1:搭建PXE Server服务器,无人值守安装kvm虚拟机2:通过命令行管理虚拟机3:通过逻辑卷创建虚拟机快照,生成另一台虚拟机实现步骤:1:搭建PXE Server服务器,无人值守 ...
  • 好久没有写点东西了,今天在床上用ipad上网,突然想到用他写东西是非方便,感觉太不方便了.后来还是第二天改成了笔记本写比较习惯.工作的时间也不算短了,到现在已经有11个年头了,本人比较懒,而且善于为懒找借口.就拿总结 ...
  • 关于三级联动或者四级联动等的一些思考
    原理概述如图 1.当页面初始化时应当初始化的数据源: I级数据源.II级数据源.III级数 ...
  •  快速划分子网的方法1.被选用的子网掩码会产生多少个子网(2x ,其中x为掩码中"1"的个数)2.每个子网有多少个合法的主机号可用(2y-2,其中y为掩码中"0"的个数)3.这 ...
  • Q:在我安装了windows xp之后,我丢失了grub的boot loader.现在我尝试用grub-install来修复grub在电脑中的引导记录.但是去得到了如下的错误信息:/dev/sda does not ...
  • 网站链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/angular-filters/ Filter作用就是接收一个输入,通过某个规则进行处理, ...
  • 如果忘记思科路由器的特权密码,怎样在不损坏配置文件的前提下修改密码
    第一步:假设我们忘记了特权模式的密码我们需要对思科路由器断电重启,:在重新启动的过程中我们 ...