【问题标题】:perl crams all command-line arguments into $ARGV[0]perl 将所有命令行参数塞进 $ARGV[0]
【发布时间】:2014-01-13 22:55:17
【问题描述】:

在 Win 7 中,这是程序:

# TestArg.pl
print "\nin TestArg.pl, \$ARGV[0]=$ARGV[0], \$ARGV[1]=$ARGV[1], \$ARGV[2]=$ARGV[2]"; 

当我运行时:TestArg.pl 1 2 3 在命令行

我得到:在 TestArg.pl 中,$ARGV[0]= 1 2 3, $ARGV[1]=, $ARGV[2]=

而不是分发它们。

在注册表中:

HKEY_USERS\...\Software\Classes\pl_auto_file\shell\open\command is:
Default  REG_SZ "C:\Perl\bin\perl.exe" "%1" "%*"

我尝试将REG_SZ 更改为REG_MULTI_SZ,但它不让我,虽然我是管理员。

如果我可以编辑它会解决问题吗?

如果是这样,我如何获得访问权限?

如果它没有帮助,那会是什么?

【问题讨论】:

  • “当我在命令行运行时:TestArg.pl 1 2 3”你的意思是perl TestArg.pl 1 2 3吗?
  • 不,我依靠文件关联知道以 .pl 结尾的程序使用 perl.exe 运行。但这是个好问题!自从我发布后,我开始玩注册表,搞砸了,显然把所有东西都恢复了原样,但是现在,前面没有 perl.exe 的调用没有传递任何参数,但是使用 perl.exe 的调用可以正常工作!有谁知道应该如何设置所有的注册表项?
  • 这是 ActiveState Perl 吗?
  • REG_SZ 是你想要的
  • 是的,这是 ActiveState Perl。虽然如果问题出在 Perl 上,我会感到惊讶。 Windows 的注册表似乎有问题。

标签: windows perl command-line


【解决方案1】:

应该是%*,而不是"%*"

【讨论】:

  • 是的。谢谢你。我纠正了这一点,但它没有改变任何东西。
【解决方案2】:

我在上面的 cmets 中留下的答案太远了,无法显示,所以我会在这里重复一遍,在那里可以看到。

正如 Kenosis 所建议的,这个问题在 4 年前的问题 1695188 中得到了回答。

它需要在 Applications\perl.exe\shell\open\command 注册表字段的末尾有一个 %*。

我有那个 %*,但只在 pl_auto_file\shell\open\command 字段中。

有趣的是,设置该字段的人至少错了 4 年!

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2013-06-13
    • 2020-11-15
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多