【问题标题】:Perl Strawberry: How to run a perl script by clickingPerl Strawberry:如何通过单击运行 perl 脚本
【发布时间】:2013-09-05 13:44:31
【问题描述】:

我正在使用 Windows 7 并安装了 Strawberry。我想运行一个 perl 脚本(test.pl):

open OUTPUT, ">test.txt";
print OUTPUT "This is a test\n";

只需单击文件或单击鼠标左键重定向到 Perl 程序(使用 /perl.exe 打开)。当我这样做时,控制台会打开不到一秒钟并消失,但不会创建文件 test.txt。如果我转到 MS 命令并输入

> C:\myplace>perl test.pl  

它有效。我以前从未有过这种体验(WinXP、其他带有 ActivePerl 的 Windows 7 PC 和带有草莓的 Windows 8)。如果有人能给我提示如何解决这个问题,我会很高兴。

【问题讨论】:

    标签: perl onclick strawberry-perl


    【解决方案1】:

    这里有两个问题:

    1. 在您想要的位置创建文件。双击 perl 脚本启动它时,它不会在您在资源管理器中打开的文件夹的上下文中执行。如果要指定显式上下文,请在脚本顶部附近执行以下操作:

      use FindBin;  # This is a module that finds the location of your script
      BEGIN { chdir $FindBin::Bin }  # set context to that directory.
      

      当您创建一个没有绝对路径的新文件时,该路径被认为是相对于该目录的。

      从命令行运行脚本时没有问题,因为您指定了正确的路径。但是如果你从C:\ 运行它就像

      C:\> perl myplace/test.pl
      

      那么您已经在C\test.txt 中创建了文件。 FindBin 解决方案解决了这个问题。

    2. 通过双击运行脚本时,命令行会在您检查输出之前退出。 Windows 上的所有编程语言都存在这个“问题”。您可以通过等待某些输入来强制窗口保持打开状态。你可以这样做

      system("PAUSE");  # not portable to non-Windows!
      

      或

      warn "Press enter to exit...\n";
      <STDIN>;  # Read a line from the command line and discard it.
                # Feels akward when launching from the command line
      

      等到按下 Enter ⏎。

      另一种解决方案是始终对脚本使用命令行,这正是我的实际建议。

    【讨论】:

    • 感谢您的回答。我不知道 FindBin。很有用。但是为什么上面这个简单的测试代码可以在所有不同的计算机和操作系统上运行,但在一个中它却没有以这种方式运行呢?我只是想知道......
    【解决方案2】:

    检查你的脚本执行文件夹是什么,因为它可能与C:\myplace不同

    use Cwd;
    print getcwd();
    sleep 7;
    

    【讨论】:

    • 感谢您的回答。是的,它不同(C:\strawberry\perl\bin)。但这是一个问题吗?包含环境变量。通常,我从来没有遇到过这样的问题。
    • @giordano 可以肯定的是,您可以在编写时尝试绝对路径,即。 open OUTPUT, "&gt;", 'C:\myplace\test.txt';
    猜你喜欢
    • 2019-10-31
    • 2010-09-26
    • 2010-10-14
    • 2014-06-20
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多