13

我目前使用Strawberry Perl作为我的主要 Perl 发行版。但是,我有一些通过 cygwin 进行 Perl 调用的应用程序。这些通常会失败,因为它们正在调用与 cygwin 一起打包的 Perl 版本,并且只查看 cygwin 的 lib 文件夹。如何修改我的 cygwin 环境以调用 Strawberry Perl(并使用 C:/strawberry/perl/lib 目录)?

4

8 回答 8

22

如果您使用安装程序从 cygwin 中删除 Perl,它将默认使用 Strawberry Perl。

如果您无法从 cygwin 中删除 Perl,您可以从 Strawberry 创建指向 Perl 可执行文件的符号链接。

在 cygwin shell 中,使用以下命令集:

$ mv /usr/bin/perl /usr/bin/perl-cygwin
$ ln -s /cygdrive/c/strawberry/perl/bin/perl.exe /usr/bin/perl

这是假设您使用了默认的 Strawberry Perl 安装程序。perl.exe如果您将其安装在其他地方,请相应地更新您的位置。

通过检查 Perl 版本来确保链接正常工作:

$ perl -v

应该说This is perl, (version) 为 MSWin32-x86-multi-thread(或类似)构建,而不是 为 cygwin-thread-multi-64int 构建

于 2009-01-21T06:18:56.623 回答
1

您可以更改 PATH 以将 Strawberry 目录放在首位。Strawberry 试图通过将其目录放在 PATH 的末尾来变得更好。但是,如果您从 .zip 文件安装,它根本不会更改 PATH。

您可以移动 /usr/bin/perl,但这是一个坏主意,因为当 cygwin 尝试更新它认为是它的 perl 时它会中断。我这周刚刚发生了这种情况,并且曾经在我的 Mac 上发生过这种情况,直到我停止使用系统设置并完全独立地安装了我自己的东西。

于 2009-01-22T23:06:32.207 回答
1

我可以补充的一件好事是,如果您将正确的 perl 放在路径中的第一位,它应该可以处理您可能已经安装的特定于站点的 CPAN 模块,并且草莓 perl 在 CMD shell 中运行。

“which perl”是你的朋友。

如果遇到问题,可以设置 PERL5LIB 环境变量,但这不是必需的。

我仍然将 DOS 样式的文件路径作为参数传递给 perl 脚本,即“d:\data\myfile.txt”,而不是“/cygdrive/d/data/myfile.txt”。奇怪的是,这种混合路径表示法有效:

bash> /cygdrive/d/scripts/myscript.pl d:\data\myfile.txt

于 2009-06-22T14:34:39.643 回答
1

其中许多都是很好的解决方案,但我宁愿选择一个不需要多次修改的简单解决方案。

您需要做的就是在 .bashrc 文件中添加/修改一行。

# Prepend strawberry perl to cygwin's path
export PATH=/cygdrive/C/Tools/Perl/perl/bin:$PATH

从你的 shell 中获取 .bashrc 文件,(或启动一个新的 shell)并运行你的程序。

source ~/.bashrc
perl script.pl 
于 2015-03-20T16:48:13.777 回答
0

这可能不是首选解决方案,但您应该能够修改 #! 线:

#!/cygdrive/c/strawberry/perl/bin/perl5.10.0

我总是提到 perl 的显式位置和安装,而不是依赖于 /usr/bin 中的内容。

于 2009-02-05T17:37:53.403 回答
0

我有两个脚本,用于将 Perl 脚本的第一行修改为路径中第一个 Perl:rightperl硬编码到我的 $PATH now中的第一个 Perl ,envperl 会将行更改为 #!/usr/bin /env perl 因此仅在调用脚本时才选择要使用的 Perl。在 Cygwin 下工作得非常好(通常来自 Unix shell)。

于 2009-04-01T15:50:20.253 回答
0

如果您不想弄乱任何路径或做任何永久性的事情,那么有一个简单的TEMPORARY hack。在 Cygwin sh 提示符下键入“where perl”。它将按执行顺序列出它在 PATH 中看到的所有 Perl.exe。更改在您要使用的 perl 之前列出的您不想被看到的名称。但是请记住在完成后将它们改回来,否则您可能会遇到一些问题。

于 2012-04-29T15:58:43.257 回答
-2

我附近没有我的 cygwin 机器,所以我无法对此进行测试,但也许您可以使用脚本将 perl 命令放在前端:转到 cygwin 下的 /bin 并将 perl.exe 移动到其他类似 perl- org.exe,然后设置一个 shell 脚本,用相同的参数执行你的其他 perl。

于 2009-01-21T05:57:26.167 回答