Perlで外部コマンドを実行する方法にはいくつかあります。
最初の方法は、system関数を使う方法です。これを使うと、perlで子プロセスを起動できます。戻り値は子プロセスを実行したコマンドの終了ステータスとなります。書式は次のようになります。
system "コマンド";
例)
#!/usr/bin/perl
system "ls -1";
system "date > date.txt &";
system "ls -1";
system "date > date.txt &";
perlプロセス内でコマンドを実行するにはexec関数を使います。書式は次のようになります。
exec "コマンド";
例)
#!/usr/bin/perl
exec "ls -1";
exec "date > date.txt &";
exec "ls -1";
exec "date > date.txt &";
逆シングルクオートを利用する事で、コマンドの結果を変数へ代入することができます。リストコンテキストを使うと、改行区切りされた結果がリストへ代入されます。
#!/usr/bin/perl
my $result = `ls -1`;
print "-------------------\n";
print $result;
my $result = `ls -1`;
print "-------------------\n";
print $result;
my @resultList = `ls -1`;
print "-------------------\n";
print @resultList;
パイプとopenを組み合わせる技も知っておくと便利です。コマンド実行の結果をパイプ経由で取得して、処理をする方法と、パイプを開いて、コマンドへ文字列を渡す方法を紹介しておきます。
#!/usr/bin/perl
open(FH , "ls -al | grep -v \"~\"|");
while (<FH>) {
print ;
}
close FH;
open(FH , "ls -al | grep -v \"~\"|");
while (<FH>) {
print ;
}
close FH;
print "------------------\n";
open FH, ‘|grep -v "abc"’ or die "Can’t open\n";
print FH ‘abc’, "\n";
print FH ‘xyz’, "\n";
print FH ‘stu’, "\n";
print FH ‘abcdefg’, "\n";
close FH;
モダンPerl入門 (CodeZine BOOKS), Perl逆引きクイックリファレンス―Perl5.8対応, PerlフレームワークCatalyst完全入門といった書籍が参考になります。Perl以外のプログラミング言語に興味がある場合は、関連書籍が参考になるでしょう。
—-
関連書籍
- bashによる簡単なプログラミングを学ぶには … 仕事に使えるLinuxシェルスクリプト~bashで作る実用サンプル41
- クラスベースのオブジェクト指向プログラミング言語の基礎を学ぶには … 改訂版 基礎Java(CD-ROM付) (IMPRESS KISO SERIES)
- クラスベースのオブジェクト指向プログラミング言語を学ぶには … プログラミング言語Java (The Java Series)
- 関数型プログラミング言語を学ぶには … Scalaスケーラブルプログラミング第2版
- プログラミング言語の理論を学ぶには … プログラミング言語の基礎概念 (ライブラリ情報学コア・テキスト)