バッククォートを使用して外部プログラムを起動すると、外部プログラムの出力を文字列として取得することができます。
my $result = `echo Hello`; #=> "Hello\n"
バッククォート文字列の中では、ダブルクォート文字列と同様に変数展開が行われます。
my $name = 'Ben';
my $result = `echo Hello, $name`; #=> "Hello, Ben\n"
バッククォート文字列をリストコンテキストで評価すると、出力を行ごとに分割して取得することができます。
次の例では、Windows のファイル拡張子の関連付けを取得する assoc
コマンドを実行し、その出力を配列として取得しています。
my @associations = `assoc`;
次のようにして、foreach
(for
) ループで一行ずつ処理することもできます。
for (`assoc`) {
my($ext, $prog) = /(\S+)=(.*)/;
print "$ext --> $prog\n";
}
標準エラーへの出力も一緒に取得したい場合は、次のように、2>&1
というリダイレクトを使って標準エラーを標準出力にマージしてしまう方法があります。
my $result = `command 2>&1`;