8

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

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

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

SET .pl=perl

这是您指定使用什么程序打开内容的方式。

我可以简单地做到这一点:

c:\>test.pl
Hello, world!

事情刚刚奏效。永远。

今天,在一个使用一周的操作系统中,一切都停止了工作。

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!

请注意,这在昨天运行良好,甚至在今天早些时候。我不知道是什么改变了它,又是什么破坏了它,而且我已经看了很长时间,发现了类似但不相同的问题 - 并且没有任何修复有帮助。

我有一大堆脚本。我真的很讨厌必须在每个人之前插入世界“perl”,然后限定完整路径!

实际上,我可能必须编写一个 perl.bat 包装器,将参数文件名转换为完全限定的路径,并显式调用 perl。

我真的不想那样做。这是一个禁止援助的解决方案。我想了解什么是错误的,地址是,并解决它。

我开始讨厌Windows 7...

4

3 回答 3

8

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

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

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

它应该有一个shell\Open\command

它应该看起来像这样

  "C:\Perl\bin\perl.exe" "%1" %*

当然,您系统上的 perl.exe 路径可能会有所不同。%*是将传递给脚本的参数传递给 perl.exe 的重要位

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

C:\perlpath\perl.exe C:\scriptpath\test.pl foo bar.

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

作为额外的奖励,如果您将 .PL 添加到 PATHEXT 环境变量,您甚至不必指定 test.pl 只需test将调用 test.pl 如果它在路径中的第一个:)

于 2011-05-27T12:21:40.033 回答
2

Windows Powershell

在 Windows Powershell 中,将 .PL 添加到 PATHEXT 环境变量(否则脚本将在单独的 CMD 窗口中运行)。

但是,Powershell 不会运行命令,除非它们在 PATH 中(即“.”默认不在 $env:PATH 中,有点像 Unix 上的 root)

所以,运行一个脚本

./script 
./script.pl

最简单的方法是使用 Powershell 配置文件。

例如在 C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH"
$env:PATHEXT    = "$env:PATHEXT;.PL"

如果您不想这样做 ./ (请注意,这是一个安全风险),请添加“。” 到路径(不带引号)

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH;."

然后你可以做

script
于 2013-03-30T10:13:44.853 回答
1

您可以通过右键单击.pl文件来检查文件扩展名关联,选择properties,然后单击“打开方式”按钮(这是 XP,我不知道它在 Windows 7 中的外观)。可能是您的扩展指向了错误的位置。

于 2011-05-27T12:56:10.400 回答