私はPerlでこの奇妙な問題を抱えています。Perlスクリプト内から外部プログラムを実行しようとしていますが、この外部プログラムはパラメーターとして文字列+ワイルドカードを取ります。私のPerlプログラムは次のようになります
my $cmd_to_run = 'find-something-in-somedb myname* |'
open(procHandle, $cmd_to_run); # I am using open because I want to
# parse the output using pipes
奇妙な理由で、このPerlスクリプトを(Windowsで)実行すると、open関数の呼び出しでエラーが発生します。
'sqlselect' is not recognized as an internal or external command
コマンド文字列に存在することと関係があると推測した*ので、それを削除すると、コマンド文字列は次のようになります。
my $cmd_to_run = 'find-something-in-somedb myname|'
これで、Perlスクリプトを実行すると、完全に正常に機能します。問題が発生するのは、ワイルドカード文字が存在する場合のみです。
注意すべきいくつかのポイント:
同じコマンドプロンプト(このperlスクリプトを実行している場所)でワイルドカード文字を使用して同じコマンドを実行しましたが、完全に正常に機能します。
Windowsで_open関数を使用してCでプログラムした場合も、同じコマンドが機能します。
問題はワイルドカード*が存在する場合にのみ発生するようです、少なくともそれは私が推測していることです
いいえ、Unixでは試していません。
手がかりはありますか?
編集:これはENVと関係があることがわかりました。私が実行しようとしているプログラムは、検索文字列に「*」ワイルドカードが存在する場合にのみ「sqlselect」を使用します...find-something-in-somedbとsqlselectの両方が同じ場所に存在します。この場合、perlは「sqlselect」ではなく「find-in-db」を見つけることができます。
申し訳ありませんが、元の問題が現在別のものであることが判明しています。ワイルドカードではなく「ENV」に関係するもの*