レンタルサーバでは好ましくないが、やむを得ずPerlのCGIから他のCGIを呼び出すには、exec または system 関数を使う。
----------------------------------------
・exec コマンド/cgi [,引数] [,引数…]
・system コマンド/cgi [,引数] [,引数…]
----------------------------------------
exec関数は、引数をリストとして渡し、コマンド/cgiを実行する。実行後は親のPerlスクリプト(cgi)に処理は戻らない。ただし、ブラウザから親cgiを呼び出し→子cgiを実行した場合は、ブラウザには子cgiの実行結果が親cgiの実行結果として戻される。
system関数は、引数をリストとして渡し、コマンド/cgiを実行する。実行後は親のPerlスクリプト(cgi)に処理が戻る。system関数は実行した子コマンドが終了するのを待ち、その終了ステータスを返す。
いずれも引数は子側では@ARGV配列に入るので、$ARGV[0]などとして利用する。
・親cgiの例
oya-exe.cgi ( execで呼び出す場合 )
--------------------------------------------------------
#!/usr/bin/perl
$str1 = "rain";
$str2 = "morning.";
exec ( "./child.cgi" , $str1 , $str2 );
print "OK"; #処理が戻らないので、この行は実行されない。
--------------------------------------------------------
oya-sys.cgi ( systemで呼び出す場合 )
--------------------------------------------------------
#!/usr/bin/perl
$str1 = "fine";
$str2 = "morning.";
system ( "./child.cgi" , $str1 , $str2 );
print "OK"; #処理が戻るので、この行が実行される。
--------------------------------------------------------
・子cgiの例
child.cgi
--------------------------------------------------------
#!/usr/bin/perl
print "Content-type: text/htmlnn";
print "It will be " . $ARGV[0] . " " . $ARGV[1];
--------------------------------------------------------
----------------------------------------
・exec コマンド/cgi [,引数] [,引数…]
・system コマンド/cgi [,引数] [,引数…]
----------------------------------------
exec関数は、引数をリストとして渡し、コマンド/cgiを実行する。実行後は親のPerlスクリプト(cgi)に処理は戻らない。ただし、ブラウザから親cgiを呼び出し→子cgiを実行した場合は、ブラウザには子cgiの実行結果が親cgiの実行結果として戻される。
system関数は、引数をリストとして渡し、コマンド/cgiを実行する。実行後は親のPerlスクリプト(cgi)に処理が戻る。system関数は実行した子コマンドが終了するのを待ち、その終了ステータスを返す。
いずれも引数は子側では@ARGV配列に入るので、$ARGV[0]などとして利用する。
・親cgiの例
oya-exe.cgi ( execで呼び出す場合 )
--------------------------------------------------------
#!/usr/bin/perl
$str1 = "rain";
$str2 = "morning.";
exec ( "./child.cgi" , $str1 , $str2 );
print "OK"; #処理が戻らないので、この行は実行されない。
--------------------------------------------------------
oya-sys.cgi ( systemで呼び出す場合 )
--------------------------------------------------------
#!/usr/bin/perl
$str1 = "fine";
$str2 = "morning.";
system ( "./child.cgi" , $str1 , $str2 );
print "OK"; #処理が戻るので、この行が実行される。
--------------------------------------------------------
・子cgiの例
child.cgi
--------------------------------------------------------
#!/usr/bin/perl
print "Content-type: text/htmlnn";
print "It will be " . $ARGV[0] . " " . $ARGV[1];
--------------------------------------------------------