如何在 Windows 上读取 Perl 中的管道输入?
我正在尝试在 Perl 中创建一些基本上类似于 Unix tee
命令的东西。我正在尝试读取 STDIN 的每一行,对其运行替换,然后打印它。 (最终,还将其打印到文件中。)如果我使用控制台输入,则这有效,但如果我尝试将输入通过管道传输到命令,它不会执行任何操作。这是一个简单的示例:
print "about to loop\n";
while(<STDIN>)
{
s/2010/2009/;
print;
}
print "done!\n";
我尝试将 dir 命令通过管道传递给它,如下所示:
C:\perltest>dir | mytee.pl about to loop done!
为什么它看不到管道输入? (我在 WinXP 上使用 Perl 5.10.0,如果相关的话。)
I am trying to create something in Perl that is basically like the Unix tee
command. I'm trying to read each line of STDIN
, run a substitution on it, and print it. (And eventually, also print it to a file.) This works if I'm using console input, but if I try to pipe input to the command it doesn't do anything. Here's a simple example:
print "about to loop\n";
while(<STDIN>)
{
s/2010/2009/;
print;
}
print "done!\n";
I try to pipe the dir command to it like this:
C:\perltest>dir | mytee.pl about to loop done!
Why is it not seeing the piped input? (I'm using Perl 5.10.0 on WinXP, if that is relevant.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这实际上是 Windows 处理 IO 重定向的一个错误。我现在正在寻找参考,但正是该错误要求您指定
而不是能够使用
请参阅 Microsoft 知识库文章 如果从文件关联启动,STDIN/STDOUT 重定向可能不起作用:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
十进制
1
This is actually a bug in how Windows handles IO redirection. I am looking for the reference right now, but it is that bug that requires you to specify
rather than being able to use
See Microsoft KB article STDIN/STDOUT Redirection May Not Work If Started from a File Association:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
Decimal
1
尝试:
Try:
可能是 Microsoft KB #321788 吗?
Could it be Microsoft KB #321788?
尝试通过实践来学习并没有什么错,但是快速搜索 CPAN 会显示 Perl 中的
tee
问题的许多可能的解决方案。例如:PerlIO::Tee。
There's nothing wrong with trying to learn by doing, but a quick search of CPAN shows a number of possible solutions for the
tee
in Perl problem.For example: PerlIO::Tee.
嗯,恕我直言,perl 是 sed 的糟糕替代品;)
目录 | sed s/2009/2010/
Well IMHO, perl is poor substitute for sed ;)
dir | sed s/2009/2010/