我在perl中看到过这两种形式的管道open
。
一个是简单的管道打开
open FH,'| command';
和其他是安全管道打开
open FH,'|-','command';
现在,-
在第二个中的用途是什么?他们都写到管道。我知道-
要求新流程。
简单|
是否也会创建新流程?
我们何时/应该使用安全管道打开|-
?
答案 0 :(得分:3)
之间没有区别
open my $PIPE, '| command';
VS
open my $PIPE, '|-', 'command';
“安全”开放实际上是
open my $PIPE, '|-', 'program', @one_or_more_args;
此版本保证直接启动程序;没有调用shell。它还使您不必将参数转换为shell文字。换句话说,
open my $FH, '|-', 'program', @one_or_more_args;
类似于
use String::ShellQuote qw( shell_quote );
open my $FH, '|'.shell_quote('program', @one_or_more_args);
但是没有shell(因此浪费了更少的资源,你得到程序的PID而不是shell,并且你知道程序是否死于信号)。
不幸的是,没有类似于system
的零args程序的语法。
(还有open my $PIPE, "|-"
没有进一步的args,但那是别的。)
答案 1 :(得分:1)
当你计划(你想)从你自己的叉子(-
)或你自己的叉子-|
进行管道时,你必须使用|-
。 open
函数返回父进程中子进程的ID,子进程中返回0。例如:
if( open(TO, "|-") ) {
# Parent process
print TO $from_parent;
}
else {
# Child process
$to_child = <STDIN>;
exit;
}