Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. 標準関数
  3. here

system関数 - 別プロセスを実行する

system関数を使うと、別のプロセスを実行することができます。

system $cmd;

プロセスが正常に終了した場合は0が戻り値として返されます。エラーチェックは次のように行うことができます。

tarやgzipなどのコマンドを実行したい場合はsystem関数を使うとよいです。

lsコマンドを実行する

system関数のひとつの例としてカレントディレクトリの内容を表示するLinuxのlsコマンドを実行してみます。

エラーチェックとしてor演算子とdie関数を使用しています。

my $cmd = 'ls';
system($cmd) == 0 or die "Can't execute $cmd: $!";

以下のように、カレントディレクトリの一覧が表示されます。

a.pl              gperl                             module-starter.txt                not_important_project  ringowiki  static-perl.tar
batch             Image-PNG-Simple                  mojo                              Object-Simple          role       taskdeal
crontab.txt       imager-japanese-translation.wiki  mojo-examples

system関数に引数を渡す

system関数に渡すコマンドに引数を渡すには、コマンドを配列にしてsystem関数に渡します。たとえば「-l」と「tmp」という引数を渡したい場合は次のように記述します。

my @cmd = ('ls', '-a', 'tmp');
system(@cmd) == 0 or die "Can't execute @cmd: $!";

system関数のセキュリティ

system関数は、セキュリティの問題が起こりやすい関数です。たとえば、もしWebからの入力データが「rm」で、それをsystem関数にチェックせずに渡したとしたらと考えてください。

system関数によって、意図しないコマンドを実行されてしまいます。

ユーザーからの入力をプログラムで受け取っている場合は、system関数に渡す引数については、必ず入力が安全なものであることを確認してください。

Qiitaで
「3分間Perlテキストクッキング」
という連載を始めました。
テキスト処理を題材にして、3分くらいで読める分量で、書いていきます。
文字コード、テキストデータ、コンピュータにおけるテキストの扱いなど、ソフトウェアの基礎の話題も
3分間Perlテキストクッキング