システムコマンドを実行して元のプログラムを終了する
exec
はシステムコマンドを実行します。そして、元のプログラムを終了します。
もしシステムコマンドの結果を得たい、そして、元のプログラムを終了させたくないなら、
system
を使ってください。
exec
は、もし指定のコマンドが存在しなければ、元のプログラムは終了せず、
undef
返します。
そして、エラーメッセージを $!
にセットします。
exec('ls -la');
# もし exec に指定したコマンドの実行が成功すれば、
# このプログラムは終了させられ、以降のコードは実行されない
print "Failed to execute the command: $!\n";
exec
に引き渡すシステムコマンドは、パラメータをリストとして指定することもできます
exec('ls', '-la');
use warnings;
が宣言された環境では、exec
コマンドの後に何かしらのコードが記述されていると警告が出力されます。
Statement unlikely to be reached at sample.pl line 9.
(Maybe you meant system() when you said exec()?)
もし use warnings;
が宣言された環境であっても警告を出力されないようにしたいなら、
exec
の戻り値を評価するようにすると良いでしょう。
use strict;
use warnings;
my $result = exec( 'ls', '-la' );
unless ($result) {
print "Failed to execute the command: $!\n";
}
そのほか、or
を使う方法や、中カッコで囲む方法もあります。
exec( 'ls', '-la' ) or print "Failed to execute the command: $!\n";
{ exec( 'ls', '-la' ) };
print "Failed to execute the command: $!\n";