突然之间,perl脚本不起作用,除非我用"perl"作为前缀并给出脚本的完整路径

Cli*_*JCL 8 windows perl command-line prefix strawberry-perl

我一直在使用自己的个人环境,这种环境已经持续了20多年.大约14年前,我开始整合许多perl脚本.我一直使用相同的命令行解释器树22年(NDOS-> 4DOS-> 4NT-> TCMD,真的都是相同的程序).

我刚从ActiveState windows perl切换到Strawberry Perl.

多年来,这就是我运行perl脚本所需的全部内容:

SET .pl=perl
Run Code Online (Sandbox Code Playgroud)

这是你如何指定打开东西的程序.

我可以这样做:

c:\>test.pl
Hello, world!
Run Code Online (Sandbox Code Playgroud)

事情很有效.永远.

今天,在一周的操作系统中,事情就停止了.

Perl脚本将运行,但它们不会做任何事情.没错.没有输出.没有.

唯一可行的方法是,如果我在脚本前添加"perl"(在这种情况下,我的路径不会被搜索,因为脚本名称现在是一个参数,所以我不得不填写脚本的完整路径)

这就是我成为的样子:

C:\>test.pl

C:\>perl test.pl 
Can't open perl script "test.pl": No such file or directory

C:\>perl c:\bat\test.pl 
Hello, world!
Run Code Online (Sandbox Code Playgroud)

请注意,昨天工作正常,甚至更早.我不知道是什么改变了这个,什么打破了它,我看了很长时间,发现了类似但不完全相同的问题 - 没有任何修复有帮助.

我有一大堆脚本.我真的很讨厌必须在每个人之前插入世界"perl",然后才能获得完整的路径!

实际上,我可能不得不编写一个perl.bat包装器,它将参数filename转换为完全限定的路径,并显式调用perl.

我真的不想那样做.这是一个禁令援助解决方案.我想知道什么是错的,地址是,并解决它.

我开始讨厌Windows 7 ......

par*_*mar 8

我认为您的问题很可能与.pl到perl.exe的关联被破坏了.

在注册表中查看HKEY_CLASSES_ROOT\.pl它下面可能有Perl(或说FOO)子节点

现在看看HKEY_CLASSES_ROOT\Perl或FOO,如果是这样的话.

它应该有一个shell\Open \命令

应该看起来像这样

  "C:\Perl\bin\perl.exe" "%1" %*
Run Code Online (Sandbox Code Playgroud)

当然,系统上的perl.exe路径可能不同.的%*是通过你传递给你的脚本perl.exe所在参数的重要位

因此,当您在命令窗口中执行"test.pl foo bar"时,幕后的shell实际上是在调用

C:\perlpath\perl.exe C:\scriptpath\test.pl foo bar.
Run Code Online (Sandbox Code Playgroud)

当您只是在Windows资源管理器中选择*.pl文件并尝试将其与perl.exe关联时,会发生此类问题.

作为一个额外的好处,如果你将.PL添加到PATHEXT环境变量,你甚至不必指定test.pl,如果它是路径中的第一个,则test将调用test.pl :)

  • 我_think_命令行来检查你的文件关联是通过"assoc"命令.在我的Windows机器上键入`assoc .pl`会产生`".pl ="`,这意味着我的.pl文件与Perl无关.祝好运! (2认同)