技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

perl で外部コマンドの戻り値を取得する。

perl のsystem関数を使って外部コマンドを実行する時、外部コマンドの戻り値を取得するには、ちょっと注意が必要。

Perlの組み込み関数 system の翻訳 - perldoc.jp

返り値は、wait が返すプログラムの exit 状態です。 実際の exit 値を得るには 右に 8 ビットシフトしてください

上記perldocの通り、外部コマンドの戻り値を取得するには、system関数が返した値を右に 8 ビットシフトする必要がある。
以下にテストスクリプトとその結果を示す。

use strict;
use warnings;

my $rc = system("test.bat"); # test.bat (外部コマンド)は 1 を返す。
print "Return code = $rc\n"; # rcは 256 になる。

$rc = $rc >> 8; # ★8bit右にシフト
print "Return code = $rc\n"; # rcは 1 になる。これは外部コマンドの本当の戻り値。