• ベストアンサー

Perl変数から外部プログラムの標準入力へ

Perlのプログラム内部で保持している変数の値をシェルコマンドに与える方法はありますか? $value=12345; や、 @array=('ONE', 'TWO', 'THREE'); などの変数の値を外部コマンド(標準入力を受けることができるコマンド)に渡したいのです。 方法がわからないので、現在は一度ファイルに書き出して、 system('cat file.name | command'); のようにして渡しています。なんか賢くない書き方のような気がするのですが。

  • Perl
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • zebedeer
  • ベストアンサー率66% (80/121)
回答No.2

> system('cat file.name | command'); こうするくらいなら、こうのほうがましかも。 system("command $value"); # or `command $value` ただし、どれも汚れた値は扱えない。 (open & printだとどうなんだろう?sh使ってないからok?) >open(FILE, "| /my/command |"); perlipc(Perl のプロセス間通信)の日本語訳を参考URLに上げておきます。 (双方向通信はやったこと無いけど、socketpairが無難なのかな?)

参考URL:
http://www.kt.rim.or.jp/~kbk/perl5.005/perlipc.html#Bidirectional_Communication_with
ssaass
質問者

お礼

ありがとうございます。 やろうとしていたことがプロセス間の通信にあたり、まさにそのことを記述したドキュメントが存在するということすらわかっていなかったので、助かりました。 これから勉強してみます。

その他の回答 (1)

  • angband
  • ベストアンサー率51% (86/168)
回答No.1

open関数で、commandへの出力をファイルとして開けば いいのではないでしょうか。 open(MYCMD, "| /your/command"); print MYCMD $value;

ssaass
質問者

お礼

入力側のパイプと出力側のパイプは同時には使えないという記述を見つけました。こういうことを実現したい場合、普通どうするんでしょうか?

ssaass
質問者

補足

ありがとうございます。 それでは、標準入力で受けて標準出力に書き出す外部コマンドがあり,Perl内部でそれを利用したい場合、 open(FILE, "| /my/command |"); print FILE $value; # commandへの入力 while(<FILE>){ # commandの出力を利用 } でファイルと同じように扱えますか?試したところどうもうまくいかないのですが。

関連するQ&A

  • 【シェルスクリプト】 ローカル変数、グローバル変数

    シェルスクリプトのローカル変数、グローバル変数の取り扱いで迷っています。 ---------------- #!/bin/bash count=0 cat file | while read i do count=`expre $count + 1 ` done echo $count ---------------- fileの中身をcatで流して、それを一行ずつ読み込みます。 そのつど、count の値を増やしていくようにしたいのですが、最後の出力値は0となります。 cat→whileで読み込ませて処理している間はローカル変数として扱われているのでしょうか。 またそうであるならば、シェルスクリプトでグローバル変数を明示的に宣言するにはどうのようにすればいいのでしょうか。

  • Perl HTML JavaScript

    ソースコードについて <input type="hidden" id="hoge" name="hoge" value="$hensu"> このコードのvalueの値(変数)をソースから見て   見えなくさせたい(認識できなくさせたい) おそらく完全に見えなくするのは不可能と思うのですが、 valueの値をソースで見えにくくする、認識できなくする方法は ないでしょうか? 完全に見えなくできるならそれが1番いいです^^; valueの値だけjsの外部ファイルにするとかですか? その方法ですと、Valueの値はPerlでの変数なのですが、 そのようなことも可能でしょうか?

    • ベストアンサー
    • Perl
  • Perl 配列の質問です

    @a=("One","Two","Three"); リスト("One","Two","Three")を配列@aに代入する。 $a[0]=1; 配列の要素$a[0] 上記は配列の要素でいいのでしょうか、もしくは変数$a[0]ということになるのでしょうか。

    • ベストアンサー
    • Perl
  • シェルの変数値を読み込む

    シェル(sh)で持っている変数($1~$5)をperlのプログラムに渡したいのですが方法がわかりません。 ご存じの方いらっしゃいましたらお願いします。 Q(1) test.sh: $1、$2、$3、$4、$5 にそれぞれ値が格納 ./test.pl $1 $2 $3 $4 $5 ↑シェル側出力はこうですか? Q(2) test.pl: どうやって変数値($1~$5)を受け取るのでしょうか? 以上、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 【シェルスクリプト】awkの結果を変数に格納したいです。

    【シェルスクリプト】awkの結果を変数に格納したいです。 パイプを使って、3つのコマンドを実行し、変数に格納したいです。 command1 | command2 | command3 command2 には grep が、 command3 には awk が入ります。 よろしくお願いします。

  • シェルスクリプト コマンドを変数にした時の呼び方

    はじめまして、シェルスクリプトを勉強中の者です。 コマンドを変数にいれて、まとめました。 しかしコマンドの変数を呼びこもうとするとエラーになります。 ============================================ #!/bin/sh GREP="grep" cat "${GREP} '^[0-9]' /home/hoge/test.nicdf" ============================================ ================ シェル実行結果 ============= $ ./test.sh cat: grep '^[0-9]' /home/hoge/test.nicdf: そのようなファイルやディレクトリはありません どう書けば、エラーにならずに正常に動作するでしょうか? ご教授の程よろしくお願いします。

  • 標準入力からシェル変数及び環境変数に値を設定する(bash)

    標準入力からシェル変数及び環境変数に値を設定する方法で、cshの場合は「set 変数=$<」ということは確認しているのですが、bashの場合はどのようにすればよろしいのでしょうか?ご教授お願いいたします。

  • Bシェルで不定変数名を変数として取り扱うには

    ファイル(test.txtとします)に 0755 $HOGE/herehere $FOO/bar のような形で変数を示す文字列がはいっています。 どんな変数名かは事前にわかりません。 これをシェルプログラムで、 $が付いていたら変数名と解釈して使用したいです。 どんな変数名がファイルに含まれているかがわかっているなら、 以下のようにできたのですが、 変数名が不明のときにはどうしたらファイルに含まれている変数を そのまま使用できるのでしょうか。 HOGE=`command HOGE` #HOGEを引数にcommandコマンドを呼び出した結果を$HOGEとする FOO=`command FOO` #↑test.txtの中には$HOGEや$FOOが何度も出てくるので、 #出てくるたびにcommandコマンドを使うのは避けたい。 while read LINE do  FILE=`echo $LINE|sed "s%"'$HOGE'"%$HOGE%g"` done < /test.txt

  • perlから他のプログラムを動かす方法

    Windows XP環境で作業をしています。 コマンドプロンプトで、次のように動かすプログラムがあったとき、 今のディレクトリ>command file1 file2 file3 これをperlから呼び出したい(perlで実行させたい)のですが、どのように書けばいいのでしょうか。 調べるとパスという言葉がよく出てくるのですが、パスという言葉の意味もよくわかっていません; わかる方がいらっしゃいましたら、是非教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • perlで変数の中身を変数とみなす方法ってありますか?

    perlで、変数の中身を変数とみなし、その中身を知る方法ってありますか? 具体的に言うと、 $abc = "$xyz"; $xyz = "test"; なる状況だったとして、$abc から "test" という文字列にたどりつく 方法ってあるのでしょうか? 何をしたいのかというと、テキストファイル上に "$xyz" と書かれてたと します。そのテキストファイルを perl で解読したとき、その時点での 実行中の $xyz に何が入っているかを得たいのです。 もちろん、連想配列を使えば似たようなことができるのは知っていますが、 性質上、できればスタティック変数を使いたいのです。 そのような方法は、perl には用意されているのでしょうか?

    • ベストアンサー
    • Perl

専門家に質問してみよう