我遇到了Perl的这个奇怪的问题。我试图从我的Perl脚本中执行一个外部程序,并且这个外部程序以字符串+通配符作为参数。我的Perl程序看起来像这样为什么我的管道中的*在Perl中不能在Windows上打开?
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脚本它活像KS非常好。只有当通配符存在时才会出现问题。
几点需要注意:
我跑了通配符字符相同的命令,在相同的命令提示符(我在哪里执行这个perl脚本),它运行完美..
当我在Windows中使用_open函数在C中进行编程时,相同的命令有效。
问题似乎是,只有当通配符*存在,至少这是我猜
不,我还没有尝试过的Unix这个..
任何线索? ??
编辑:我发现这与ENV有关。我试图运行的程序仅在搜索字符串中存在“*”通配符时才使用“sqlselect”... 这两个find-something-in-somedb和sqlselect都出现在相同的位置。在这种情况下,perl能够找到“find-in-db”,而不是“sqlselect”
对不起,我认识到原来的问题现在变成了别的东西..与“ENV”有关的事情,而不是与通配符*
另一个令人费解的downvote。嗯... – 2009-07-10 21:23:47
我会upvote来平衡它,但的确... ... downvote和解释为什么没有评论? – ephemient 2009-07-10 21:46:51