perl - 如何创建while循环?
问题描述
我有这个任务,我们希望将一个子进程循环到一个阅读器中,直到它作为 UNDEF 返回。我对编程还是很陌生,所以我很难理解 fork 和 WRITER,READER 函数是如何工作的,所以这让这项任务变得更加困难。我不太确定如何实现这个循环?
这正是所要求的:
让父母进入一个循环,询问用户要发送的消息,直到用户在没有消息的情况下按下回车键($msg eq “\n”)。让孩子进入循环读取管道并打印结果,直到读取管道返回 UNDEF,就像到达文件末尾一样。循环会像这样开始: while ($msg= ) {...}
第一个循环很简单,涉及子进程的第二个循环让我感到困惑。我完全不知道如何完成这个。任何帮助将不胜感激!
这是代码:
use strict;
pipe(READER, WRITER);
autoflush WRITER 1;
print "\n";
my $pid = fork();
if ($pid){
&userInput($pid);
}else{
&userOutput();
}
sub userInput{
close READER;
my $child = $_[0];
print "Parent Process $$ Created Child Process $child\n";
my $user_input = "...";
while ($user_input ne "\n"){
print "Enter your name: ";
$user_input = <STDIN>;
#If user input is't "\n" do:
print "Parent PID $$ received: $user_input\n";
print WRITER $user_input;
# and then recursively call myself
waitpid($child, 0);
print "Child Process $child has finished\n";
}
}
sub userOutput{
close WRITER;
my $child = $$;
my $result = <READER>;
print "Entering Child Process with id $child\n";
print "RECEIVED $result FROM PIPELINE\n";
}
解决方案
while
像在UserInput
. 两者都从输入中读取,并且您使用相同的想法来完成这两项任务:
while( <READER> ) {
...
}
<READER>
当没有更多内容可读取时(即另一端关闭连接),行输入运算符 ( ) 返回 undef。这会while
自动停止,因为undef
它是一个错误值。
这和问题告诉你要做的事情是一样的。现在填写属于循环的语句,你就在那里。
推荐阅读
- django - Docker + Django + Vue.js + Webpack 如何正确配置 nginx?
- c# - 如何保护 .Net Core 上的 Web api 控制器仅供本地计算机使用
- postgresql - 使用 postgresql 在 K8s 中配置超集的问题
- webrtc - WebRTC TURN“中继传输地址”可以与多个对等方共享吗?
- android - 是否可以在android java的csv文件中存储带有标签的图像嵌入
- python - Python环境使用conda安装tensorflow-gpu时不使用GPU
- azure-devops - 通过 UI 触发 Azure 管道问题
- java - java进程随着时间的推移消耗更多内存但没有内存泄漏
- java - 带有会话获取在线用户的 Spring Security 返回空
- symfony - 是否可以在树枝中的宏中扩展块