我已经在我的Windows机器上设置了一个本地Perl Web环境。我正在使用的应用程序最初来自Linux服务器,因此源.pl
文件的shebang看起来像这样:
#!/usr/bin/perl
这会在我的Windows dev机器上导致以下错误:
(OS 2)The system cannot find the file specified.
是否可以更改Apache 2 conf,以便在Windows机器上忽略shebang?当然,我可以将shebang设置为#!c:\perl\bin\perl.exe
,这是显而易见的;但问题在于部署更新的文件。显然,在每次部署时都更改这一点非常不方便。我在Windows 7上使用ActivePerl。
更新:
我应该提到我需要保留shebang,这样脚本才能在我们的共享主机Linux生产服务器上工作。如果我没有这个约束,我不必使用shebang,那么显而易见的答案就是不使用它。
8条答案
按热度按时间d7v8vwbk1#
我在脚本中使用
#!/usr/bin/perl
,并在Windows上配置Apache以忽略shebang行。Add到你的
httpd.conf
,并按照Apache文档中的说明设置Windows注册表项。以下是我导出密钥时得到的内容:
我一直在我的Windows笔记本电脑上使用Apache和ActiveState Perl,在我的服务器上使用ArchLinux附带的Apache和Perl发行版。
Apache文档(我上面链接的)指出:
Registry-Strict是Apache 2.0中的新选项,它与Registry做的事情相同,但只使用子项
Shell\ExecCGI\Command
。*ExecCGI
项不是一个常见的项。它必须在Windows注册表中手动配置,因此可以防止意外的程序调用您的系统 *(强调我的)。nvbavucw2#
没有可移植的shebang线。即使在相同的平台和体系结构上,也可能有人在不同的位置安装了perl。
诀窍是不要手工安装模块和脚本。当你把所有东西打包成发行版并使用模块工具链时,shebang行会自动修改为指向你用来安装所有东西的perl。你不应该考虑这些细节。:)
lokaqttq3#
我使用
#!/usr/bin/env perl
作为我所有Perl的shebang,无论是在 *nix还是在Windows上。Windows只是忽略它,Unix遵循env
到所选的Perl disto。lsmd5eda4#
在win7和更高版本中,你也可以使用“dos”命令mklink。
以管理员身份启动一个cmd shell,并执行以下操作:
ix0qys7i5#
1.安装 * 任何 * Windows Bash风格(如Cygwin,MSYS 2或GnuWin 32);
1.创建一个简单的重定向shell脚本:
1.创建注册表项:
(......等等。)
1.在您的
httpd.conf
文件中添加Jot:Apache现在可以根据你选择的Bash风格来解析Unix的shebangs。这比在注册表中硬编码解释器路径提供了更多的灵活性。
iswrvxsc6#
我的工作方式是将
perl.exe
复制到c:/usr/bin/
,并将其重命名为perl
(剥离.exe
)qlfbtfca7#
我手头没有Windows,但perlcritic说:
所以,我想
#! perl
应该可以工作。编辑:在Linux上不工作;显然在
parrot
上工作,尽管我不知道他们是如何管理的。c9x0cxw08#
如何使用Linux shebang(#!/usr/bin/perl)在Windows 10中的本地主机上运行基于Perl的网站{site-name}?
这对我很有效:
在默认配置中,您必须使用此shebang:
是否可以将目录(在-I切换后)永久包含到@INC?
是的,你可以通过设置PERLLIB或PERL 5LIB环境变量来实现。这在从命令行运行perl脚本时有效,但令人惊讶的是,XAMPP中的apache服务器会忽略它。然而,@INC目录之一(C:/Perl/perl/site/lib)通常是空的,所以你可以创建指向网站目录的符号链接:
现在,你可以使用这个shebang:
此外,您可以创建目录c:\usr\bin
然后从C:\perl\perl\bin\中复制perl.exe。
(另一个mklink技巧由于某些原因在这里不起作用。
最后,你可以在Windows上使用Unix风格的shebang: