首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用两个交互的perl脚本

尝试使用两个交互的perl脚本
EN

Stack Overflow用户
提问于 2014-12-04 13:13:50
回答 2查看 74关注 0票数 1

我对perl和一般编程都比较陌生。现在,我正在尝试更多地了解如何使两个perl脚本交互,以及如何了解父进程/子进程。为此,我编写了两个小perl脚本(a.pl和b.pl),以便更多地了解这些内容:

a.pl:

代码语言:javascript
复制
#!/usr/bin/env perl
use strict;
use warnings;
print "\npick a card, any card you want!\n>";
my $card = <STDIN>;
my @cmd = ('./b.pl');
push @cmd, $card;

system(@cmd);

print "sorry, i can't tell you the trick. magician's code...\n";

b.pl:

代码语言:javascript
复制
#!/usr/bin/env perl
use strict;
use warnings;

my $card = "@ARGV";

print "\nis this your card?\n\n$card\n(y/n)>";
chomp(my $answer = <STDIN>);

exit if $answer eq "y";

print "will i ever be a true magician?\n\n" if $answer eq "n";

关于这件事,我想征求几点意见。首先:我将"y“的反应传递回第一个脚本的原因是,我想了解父进程/子进程是如何工作的。如果我正确地理解了"system“的perldoc,这个函数将父进程(在我的例子中是a.pl)搁置到子进程(b.pl)完成为止。现在,这解释了为什么当a.pl在"if $answer eq“"y”条件下死亡时,$answer会被完成。但是,如果我希望父进程死掉,子进程在特定条件下继续(例如,"if $answer eq "n“"),该怎么办?现在,当第二个STDIN用"n“表示时,程序将同时打印这两个语句(来自a.pl和b.pl的语句)。怎样才是明智之举?

另一件我想知道的是,当我编写脚本时,我把a.pl的第5-9行写成这样:

代码语言:javascript
复制
my $card = <STDIN>;
system('./b.pl $card');

这不起作用,因为无论我输入了什么STDIN,系统函数都没有传递任何参数,b.pl中的@ARGV总是返回0。这是因为您不能使用变量作为系统的参数,还是语法有问题?

正如我之前说过的,我正在尽我所能地学习perl和编程如何工作,所以如果你们对如何使这件事变得更好有任何建议或调整,我会非常高兴!

谢谢你的帮助,我真的很感激!

对虾

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-04 13:21:11

另一件事, 系统(‘./b.pl $card');

这是因为你使用的是单引号,如果你使用双引号,它应该是有效的。单引号用作文字字符串。在双引号中,变量被替换为其值。

系统(“./b.pl $card");

关于引号的更多信息:http://www.perlmonks.org/?node=quotes+in+Perl

(不幸的是,我不能完全回答你的问题)

票数 1
EN

Stack Overflow用户

发布于 2014-12-04 13:25:47

通常您不希望使用system()生成第二个perl进程.

在许多情况下,不同的perl进程需要相互“交谈”.

有关IPC (进程间通信)的一般信息,请参阅这里

在不同的perl进程之间交换信息的最常见的方法是“套接字”:IO::套接字

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27294984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档