【发布时间】:2010-11-09 20:22:14
【问题描述】:
我在使用 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 脚本时,它工作得非常好。只有存在通配符时才会出现问题。
需要注意的几点:
我在同一个 cmd 提示符(我正在执行这个 perl 脚本的地方)中运行了带有通配符字符的相同命令,它运行得非常好..
当我在 C 中使用 Windows 中的 _open 函数对其进行编程时,相同的命令可以工作。
问题似乎只存在于通配符 * 存在时,至少这是我的猜测
不,我没有在 Unix 中尝试过这个..
有什么线索???
EDIT :我发现这与 ENV 有关。我尝试运行的程序仅在搜索字符串中存在“*”通配符时才使用“sqlselect”... find-something-in-somedb 和 sqlselect 都存在于同一位置。在这种情况下,perl 如何找到“find-in-db”而不是“sqlselect”
对不起,我意识到原来的问题现在变成了其他问题。与“ENV”有关,而不是通配符 *
【问题讨论】:
标签: windows perl environment-variables pipe wildcard