- PR -

perl + open関数について

1
投稿者投稿内容
ゆいな
ベテラン
会議室デビュー日: 2006/01/19
投稿数: 89
投稿日時: 2006-06-01 16:36
お世話になります。

perlスクリプトについて質問いたします。
open関数を利用して、外部コマンドを実行する必要があるのですが
そのコマンドの戻り値を取得するにはどうすればよいのでしょうか?

シェルであれば
 ls /aaa
 echo $?
でよいかと思いますが、perl + open関数で
同じ事を実現する方法がわかりません。

$ret = open( CMD, "ls /aaa |");
???

ご存知の方、ご教示願います。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-06-01 16:47
openなの?
execじゃないの?
綾瀬
ぬし
会議室デビュー日: 2002/07/31
投稿数: 393
お住まい・勤務地: どっちも3階
投稿日時: 2006-06-01 17:02
openでやりたい何かがあるのでしょう。
コード:
open(CMD, "ls /aaa |"); 
@ret = <CMD>;
close (CMD);


試してないですが、たぶん動くんじゃないかと。
ちなみにgoogleにて「perl open コマンド 実行」で検索。所用時間10秒。
時間があったら検索技術も身に付けてみてはいかがでしょう?
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2006-06-01 17:33
プロセスの終了コードはパイプ(今回は「ls /aaa|」)を閉じた時点
(=プロセスが終了した時点)で返ってきますから、
close のマニュアルを見るとよいかと。

$ perldoc -f close の「Example:」によると、closeを実行した後に $? に
Exit status (=終了コード)が格納されているようです。

コード:
open(OUTPUT, '|sort >foo')  # pipe to sort
    or die "Can't start sort: $!";
#...                        # print stuff to output
close OUTPUT                # wait for sort to finish
    or warn $! ? "Error closing sort pipe: $!"
               : "Exit status $? from sort";
open(INPUT, 'foo')          # get sort's results
    or die "Can't open 'foo' for input: $!";

ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2006-06-02 05:51
あまり試してませんが、こんな感じ?
コード:
#!/usr/bin/perl -w

use strict;

my $command = '/bin/ls aaa|';

open INPUT, $command
  or die "Can't start ls: $!";

my @lines = <INPUT>;
close INPUT
  or warn $! ? "Error closing '$command' pipe: $!"
             : "Exit status $? from '$command'";

print @lines;


マニュアルの該当個所
perlfunc - close
perlvar
perlfunc - open
1

スキルアップ/キャリアアップ(JOB@IT)