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 ...
一周排行
  • 建议考前多熟记的知识点(1)网络规划设计师软考辅导
    建议考前多熟记的知识点<网络规划设计师软考辅导>(1)参加2014.11.8网 ...
  • php编译安装及phpize使用
    一.基础环境 1.版本 cat /etc/debian_version  5.0.10 2 ...
  • 1.windows 建立bat如下:set DaysAgo=30 set HqPath=c:\hqapp\ set LogFile=c:\del_hqapp.logforfiles /p %HqPath% /s /d ...
  • 创建一个MiniLinux:  通过对RamDisk(Initrd)分析,现在了解了initrd的主要原理及工作流程,为了加深对该过程的理解,下面使用initrd创建一个微型的linux系统,也更加深对linux开机 ...
  • 原文作者:matrix67 原文地址:面试智力题(上)  面试智力题(下)偶然间在网上看到几个原来没见过的面试智力题,有几个题目在国内流传相当广,什么n个人怎么分饼最公平,屋里的三个灯泡分别由哪个开关控制,三架飞机环 ...
  • MPLSTE手动路径设置
    拓扑:R1配置:R6配置:验证:----------------------------- ...
  • IPV6静态路由配置
    刚刚开始学习路由与交换机的配置,里面有很的东西不会,想记录下来供以后复习之用,并把它写出也 ...
  • 每次写html的时候,第一句总是要写<!DOCTYPE html>从来没有想过这句有什么作用.直到今天看公开课的时候,老师说这个很重要,并用IE演示了一下不加这句的后果--会产生页面格式错误.所以就查了下 ...
  • 转载自:51CTO下载频道你的计算机上是否存在有至关重要的数据,并且不希望它们落入恶人之手呢?当然,它们完全有这种可能 .而且,近些年来,服务器遭受的风险也比以前更大了.越来越多的病毒,心怀不轨的黑客,以及那些商业间 ...
  • WindowsServer2003DHCP服务系列之:安装和授权
    一.安装DHCP    和在Windows Server 2003上安装其他Windows ...