Я новичок в perl и программировании в целом. прямо сейчас я пытаюсь узнать немного больше о том, как я могу сделать два сценария perl, и о родительских/дочерних процессах. для этой цели, я написал две маленькие перл скрипты (a.pl и b.pl), чтобы научить себя немного больше об этих вещах:экспериментирует с двумя взаимодействующими скриптами perl
a.pl:
#!/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:
#!/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» обратно в первый скрипт, заключается в том, что я хотел понять, как работают родительские/дочерние процессы. если я правильно понял perldoc «system», эта функция помещает родительский процесс (в моем случае a.pl) на удержание, пока завершится дочерний процесс (b.pl). теперь объясняет, почему a.pl завершается, когда b.pl умирает при условии «если $ answer eq" y "". но что, если я хочу, чтобы родительский процесс умирал, и дочерний процесс продолжался в определенном состоянии (например, «если $ answer eq« n »)? как это сейчас, программа печатала бы оба утверждения (одно из a.pl и из b.pl), когда второй STDIN отвечает с «n». что было бы разумным способом сделать это?
другое дело, я задавался вопросом о том, что когда я писал сценарии, я поставил строки 5-9 a.pl так:
my $card = <STDIN>;
system('./b.pl $card');
, который не работал, потому что независимо от того, что я вошел в STDIN , системная функция не передавала никаких аргументов, а @ARGV в b.pl всегда возвращалась 0. это потому, что вы не можете использовать переменную в качестве аргумента системы или что-то не так с синтаксисом?
Как я уже говорил, я стараюсь как можно больше узнать о perl и о том, как работает программирование, поэтому, если у вас есть какие-либо советы или хитрости о том, как сделать это лучше, я был бы более чем счастлив!
благодарит за вашу помощь, я очень ценю это!
креветка
Что вы пытаетесь сделать, это взаимодействие между процессами, коротким ipc. Существует целая страница [perldoc] (http://perldoc.perl.org/perlipc.html), посвященная этой теме, но это сопоставимый тяжелый материал для новичка. Я бы начал с ['readline' /' \ '\' '] (http://perldoc.perl.org/functions/readline.html), а затем вы можете посмотреть [' open2'] (https://metacpan.org/pod/IPC::Open2). –