プロが教える店舗&オフィスのセキュリティ対策術

Perlでファイル名を取得し、そのファイルをエディタから開こうとしています。この時、初めsystem関数を使用していたのですが、これだと、呼び出したエディタを閉じるまで、Perlが開いたままになってしまうため、execコマンドを使用しようとしたのですが、うまく動作しません。どのようにしたらいいかお教え願います。

system関数で動作している時のスクリプトは下記の通りです。
$editor = '"C:/Program Files/Hidemaru/Hidemaru.exe" /c.txt '; #エディタの場所
$filename = 'D:/data/file.txt'; #開きたいファイルの場所
$openfile = "$editor\"$filename\"";
system("$openfile");

上記のプログラムで動作しているのですが、これを単純にexec関数へ置き換えると下記のようなエラーとなり、動作してくれません。
「>'C:/Program' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」

どうやら、Program filesのスペースが問題のようなのですが、これをうまく回避する方法はありますでしょうか。

ちなみに、
exec $editor;
だけですと、エディタが起動してくれます。このため、もしかしたらファイル名のスペースだけの問題ではないのかもしれませんが、よく分かりません。皆様のご助言をよろしくお願いいたします。

A 回答 (3件)

まったく理由はわからないんですが,


1.開きたいファイルの方から " を取り除く
2.次のようなスクリプトを作って, こいつを呼出す形にする
@%*
のどちらかだとうまくいく感じです.
あ, 手元の perl は ActivePerl 5.8.6 で, Windows XP Professional SP2 で確認しました.
perl 内部~Windows 内部のどこかがあやしいんですが, どこがあやしいかについては見当がつきません.

この回答への補足

Tacosanの1.の方法で動作すると書きましたが、確かに、動作します。ただ、これですと、system関数と同様に、なぜだか、Perlシステムは待ち状態になっているようです。ActivePerlの窓がファイルを開いている間、タスクバーに現れていました。昨日は、動作したことのうれしさの余り気がつきませんでした。

また、2.の方法は具体的には、どのように書けばいいのかお教え願えないでしょうか。
何分、初心者で申し訳ありません。

なお、私が使用している環境は、
Windows XP SP2でACtive Perl 5.8.8です。
再度、お教え願えれば幸いです。

補足日時:2007/08/29 00:21
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございました。
試してみましたが、うまく動作しました。私もなぜ「"」を取るとうまく動作できるのか理解できません。
ただ、確実に動作しました。

ありがとうございました。

お礼日時:2007/08/28 00:41

え~, exec に成功した時点で perl の実行そのものは終わっているはずです. 実際, コマンドプロンプトから perl を実行すると, exec をした時点でプロンプトに戻ります. 「コマンドプロンプト以外から実行」したら, どうなるかは知りません. やったことがないので.


ついでに 2 の方ですが, 例えば
@$%
という内容のファイルを c:\windows\do-ext.cmd という名前で作っておいて, perl のスクリプトでは
exec "c:/windows/do-ext.cmd $editor ~";
と書けばいい... と思います.
    • good
    • 0
この回答へのお礼

Tacosan>
そのようです。コマンドプロンプトからでしたら、うまく動作しました。どうやら、エディッタ側とのやりとりでうまくいっていないみたいです。

その辺は、今後詰めていこうと思います。この頃、急に忙しくなってしまい、ゆっくりやっていこうと思いますので、今回の質問はこれで締め切ろうと思います。

皆様、ありがとうございました。

お礼日時:2007/09/02 22:09

$editor にも $filename と同じように、ダブルクオートでくくってやればいいのではないでしょうか。

    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
ご教授いただいた内容は、
$openfile = "\"editor\"\"filename\"";
exec $openfile;
といった感じでよろしいのでしょうか。

これですと、確かに、開きたいファイルfile.txtは開くのですが、もうひとつ新規のファイルも起動してしまい、意図した動作とはなりませんでした。

私の理解不足でしたら申し訳ありません。

お礼日時:2007/08/28 00:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!