如何使用Strawberry Perl运行程序?

28
一位同事正在尝试在他的Windows机器上使用ack(一个Perl程序),在Linux下尝试过并决定要使用它。他设法在他的机器上安装了Strawberry Perl,但似乎不知道该怎么做才能让ack从命令提示符中运行。他尝试编辑#!行,但我知道那行不起作用。我相当确定Strawberry perl在他的PATH中。
在Windows上使用Strawberry将普通Perl程序添加到PATH中需要做什么?
更新:我在网上看到一些关于PATHEXT变量的信息,但不足够详细。

撤回我的答案,因为它是多余的,并且基于最初误解了你的问题。 - Frakkle
4
我希望你把它留下来,Frakkle。里面有一条对我很有用的信息,但是我现在记不起来了!(原文为英语) - skiphoppy
4个回答

22

首先要注意的是程序在Path中,而不仅仅是perl.exe。Perl二进制文件和核心程序通常会被安装在<installdir>\bin中,但其他程序可能会被安装在特定于站点的目录<installdir>\site\bin中。命令为:

dir C:\strawberry\ack* /s

可能有助于您的搜索。确保您的路径反映了您的设置。

我知道至少有两种常见的方法可以从Windows命令提示符中运行Perl程序。

第一种方法是使用pl2bat创建程序的批处理版本,它将使用perl来执行程序。已安装的程序通常会自动执行此操作,因为MakeMakerModule::Build会处理这个过程。

第二种方法是创建一个.pl文件关联。这可通过创建注册表键HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.pl\Shell\Open\Command(如果仅限当前用户,则为HKEY_CURRENT_USER)并将(Default)值设置为

"C:\strawberry\perl\bin\perl.exe" "%1" %*
那样的话,你只需要在程序名后加上 .pl 扩展名,就可以直接调用程序了。现在你可以通过 program.pl 来调用这个程序。
您可能已经注意到,在Windows上可以不使用扩展名来调用程序。系统会在 Path 中搜索该程序,但是当没有扩展名时,系统会使用 PATHEXT 来完成名称。将 .pl 添加到列表中,然后你就可以通过 program 直接调用该程序。请注意,此列表中的顺序对于搜索很重要,就像 Path 中的顺序一样重要。
安装程序通常会处理最后两个步骤,但如果想要添加自己的步骤或需要修复问题,则这些知识也很有用。

17

我只是安装了ack并在命令行中运行它,没有遇到任何问题。

Strawberry Perl安装正确吗?您能从cmd.exe中运行"perl"吗?

C:\> perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
  Platform:
    osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread
...

App::Ack是否已正确安装?

C:\> cpan App::Ack
...
Installing C:\strawberry\perl\site\lib\App\Ack.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Plugin.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Repository.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Resource.pm
Installing C:\strawberry\perl\site\lib\App\Ack\Plugin\Basic.pm
Installing C:\strawberry\perl\bin\ack
Installing C:\strawberry\perl\bin\ack.bat
Writing C:\strawberry\perl\site\lib\auto\ack\.packlist
Appending installation info to C:\strawberry\perl\lib/perllocal.pod
  PETDANCE/ack-1.88.tar.gz
  C:\strawberry\c\bin\dmake.EXE install UNINST=1 -- OK
如果是这样的话,我不明白为什么你不能从命令行运行 "ack" :
C:\> ack --version
ack 1.88

Copyright 2005-2009 Andy Lester, all rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
如果没有起作用,那么在这个链条中哪里出了问题?例如,如果你不能从命令行运行“perl”,那么Strawberry没有正确安装(或者不在你的路径中),你需要解决这个问题。但是,否则,ack会被安装到与“perl”相同的路径中,并带有“ack.bat”包装器,因此如果你可以运行“perl”,你应该能够运行“ack”。

我们没有安装App::Ack ... 我们安装了独立的ack脚本。我将尝试通过CPAN安装App::Ack,这对于这种情况可能有效,但我仍然想更普遍地了解如何通过修改PATHEXT使其工作。 :) - skiphoppy
1
是的,安装App::Ack,然后将ack.bat从perl\site\bin复制到perl\bin中(至少我是这样做的)。没有真正需要修改PATHEXT。 - Frakkle
谢谢,xdg。这让我们成功运行了。 - skiphoppy

3
另一种解决方案是使用PAR::Packer创建ack.exe - 这样他就不需要Strawberry了。

0

1. 安装草莓 Perl 2. 打开 Perl 命令行 3. 输入命令 perl test.pl

步骤


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接