当我在 Windows 环境中调用我的 Perl 脚本而不调用时 perl
首先,参数没有传递给我的脚本。
例如,
C:\> C:\my-perl-scripts\foo.pl bar
调用
foo.pl
但不识别 bar
作为参数(@ARGV
为空)。然而,C:\> perl C:\my-perl-scripts\foo.pl bar
按预期工作。
这是配置问题吗?
理想情况下,我希望能够分发一些 perl 脚本,让用户添加
C:\my-perl-scripts\
到路径然后就可以调用 foo.pl
在运行 cmd 时从任何地方。如果他们必须首先指定 perl,那么他们将始终必须提供完整的路径。
有什么想法或建议吗?
编辑:为了显示系统上的 assoc 和 ftype 是正确的,我执行了以下命令。
C:\>assoc .pl
.pl=Perl
C:\>ftype Perl
Perl="C:\Perl\bin\perl.exe" "%1" %*
C:\>more t.pl
print "'$_'\n" for @ARGV;
C:\>t a b
C:\>perl t.pl a b
'a'
'b'
C:\>t.pl a b
C:\>
我包括了 t 和 t.pl 的输出,以表明它不是 %PATHEXT% 问题。两者都没有像最初描述的那样输出任何内容,而调用 perl 首先给出了预期的响应。
我不确定下一步该往哪里看,但感谢到目前为止的建议。他们非常有帮助。
编辑 2:问题似乎出在我的 vista 商务盒上。在我的 xp pro 盒子上,它按预期工作。两者都有 ActivePerl 5.8.9。我还有另一个尚未尝试过的vista home box。如果我发现任何东西,我会回帖。
编辑 3:我找到了答案(贴在下面)。我通过运行注册表清理器,删除 perl,再次运行注册表清理器来找到它。在第二次清理时,只剩下一个无效条目 - 导致问题的条目(可能是上一次安装遗留的)。
最佳答案
我发现了问题所在。尽管 ftype 和 assoc 值是按照建议设置的,但我系统上的实际行为似乎由注册表项决定
HKEY_CLASSES_ROOT\Applications\perl.exe\shell\open\command
它应该有一个
(Default)
"C:\Perl\bin\perl.exe" "%1" %*
的字符串值当我找到这个条目时,它被设置为
"C:\Perl\bin\perl.exe" "%1"
.更改它立即解决了问题。为什么一开始就这样设定?我不知道。也许来自以前的安装?
无论如何,感谢您的建议,我希望这个答案也能帮助其他人。
关于perl - 如何让 Perl 脚本识别 Win32 cmd 控制台中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1695188/