在IntelliJ Idea中执行Perl脚本

7
我想使用IntelliJ Idea来编辑一个Perl脚本。我已经安装了适用于IDEA的Perl插件以及Windows(10)下的Strawberry Perl
语法高亮和其他功能都能正常工作,但是当我尝试运行程序时会出现以下情况:

Running the Program

我是perl的初学者,所以我仍然只使用命令行和ASCII图形。我希望在IntelliJ中简单地运行、测试和调试我的perl程序,但是当perl运行时,print语句没有将任何内容放入此对话框中...
我仍然可以在光标所在位置输入内容,输入错误的内容可能会抛出错误,这很正常。因此,<STDIN>似乎被正确映射,但是<STDOUT>没有?还是有其他问题吗?
如果我复制它显示正在运行的命令到cmd中,它完美地工作:

Mancala working

有没有一种方法可以配置Intellij,以在此对话框中获取<STDOUT>?任何帮助都将不胜感激。

现在,按照Chankey的答案,我制作了一个测试脚本,那个脚本可以正常工作:

Test.pl working

也许问题在于我从外部源导入了perl文件,而IntelliJ没有意识到它是一个脚本,或者类似的东西?但如果我将代码复制到新文件中,它仍然无法工作......

test.pl有一个区别:use warnings FATAL => 'all';而不是use warnings;。当我尝试这样做时,它可以工作,直到我输入期望数字输入的字符串,然后打印出一堆本应一直打印并退出程序的内容:

Some of the output shown now

再次强调,在命令提示符中输出正常,因此我认为这是IntelliJ的问题。有什么想法?@符号可能会产生问题吗?还是其他原因?如果任何人在Windows上使用IDEA并想玩一下我的代码,请访问github


print "stuff" 输出到 STDOUT,对吧? - Menasheh
打印的一般语法是print FILEHANDLE LIST。如果省略FILEHANDLE,则打印到上次选择(参见select)的输出句柄。因此,除非您使用select更改了FILEHANDLE,否则它将打印到默认的FILEHANDLE,即STDOUT。 - Chankey Pathak
2个回答

2

对我来说很好用。以下是步骤:

  1. 创建一个项目
  2. 右键单击项目,选择 New,然后选择 Perl5 file
  3. 为文件命名,从下拉菜单中选择 Script
  4. 编写脚本并保存
  5. 按下 CTRL+SHIFT+F10
  6. 提供一些数据作为用户输入,然后按下 Enter

输出:

enter image description here

如果仍然无法使用,则可能是您没有正确设置 Perl。

转到 File->Project Structure 并将 perl 添加到 Project SDK 中。

enter image description here

根据您的截图,我可以看到您正在使用 绝对路径 来执行 perl.exe。这意味着您没有将 perl 添加到您的 PATH 中。这似乎是 IntelliJ 无法找到它来执行您的脚本的原因。

执行:

set PATH=C:\Strawberry\perl\bin;%PATH%

如果这样仍然无法解决您的问题,那么请参阅Camelcade插件的wiki页面。作者在那里提供了逐步说明,介绍如何设置此插件。

我能否使用Cygwin代替Strawberry Perl? - AbhiNickz
你也在使用perl的绝对路径,但是你在linux上,所以你不可能正确地回答这个问题,因为你没有使用Strawberry Perl。如果这不是显而易见的话,我在windows上。你在哪里“执行”set PATH=C:\Strawberry\perl\bin;%PATH% - Menasheh
2
@abhinickz 在Intellij中吗?也许你应该单独问自己这个问题? - Menasheh
@Chankey,请查看更新的答案。我最初确实通过他的指南设置了perl插件,但是我没有做模块部分。我不明白DTL-fast是什么,或者为什么它是必要的。我只是导入了我的perl代码。我认为这应该对此没有影响,但请告诉我你的想法。 - Menasheh
@Menasheh 分享脚本和输入数据。 - Chankey Pathak
脚本链接在帖子末尾。这里
  • 您可以先在普通命令行中运行它,以查看它应该接受哪些输入。
- Menasheh

-1

尝试添加:

$| = 1;

...将其添加到脚本的顶部。Perl缓冲stdout,添加$| = 1;会立即刷新缓冲区,并应在IntelliJ调试控制台中显示print语句的输出。

另请参阅:

perl $|=1; 这是什么?


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