【发布时间】:2018-09-18 09:06:16
【问题描述】:
我正在编写一个 Perl 程序,它必须在不同的输入上多次运行几个 Perl 脚本。
我尝试使用的脚本是 count.pl 和 statistic.pl 来自
Text::NSP。
这些不是我自己写的,所以我不想尝试将它们重构为一个模块。
我看了
a similar question
并弄清楚如何使用system 方法
IPC::System::Simple.
但是,我想使用count.pl 和statistic.pl 中的命名参数。我还没有弄清楚如何做到这一点。这是我当前的代码:
system($^X, token="valid_tokens.txt", "/Users/cat/perl5/bin/statistic.pl", "ll.pm", "lab01_jav_bigrams.ll",
"/Users/cat/Perl_scripts/214_Final_project/lab01_java_bigrams.cnt");
这是我得到的错误:
在 ngram_calcs.PL 第 22 行,“valid_tokens.txt”附近,不能修改标量赋值中的常量项,在 ngram_calcs.PL 第 22 行使用“strict subs”时,不允许使用裸词“token”。
值得注意的是,在我添加命名参数之前,代码运行良好。如何为IPC::System::Simple 提供命名参数?还是有更好的方法来做我想做的事情?
编辑:谢谢,Haukex,我确实有错误的参数,并且使用“--token=valid_tokens.txt”有效。
即使问题解决了,我也会分享更多背景信息,以便其他看到的人受益。在命令行上我会输入:
count.pl -token validtokens.txt lab01_java_bigrams.cnt Users/cat/CS214/lab01_java.txt
statistic.pl -score 6.63 ll.pm lab01_java.ll lab01_java_bigrams.cnt
这是正确的 perl 代码:
system($^X, "/Users/cat/perl5/bin/count.pl", "--token=valid_tokens.txt", "lab01_java_bigrams.cnt", $filename);
system($^X, "/Users/cat/perl5/bin/statistic.pl", "--score=6.63", "ll.pm", "lab01_java_bigrams.ll", "/Users/cat/Perl_scripts/214_Final_project/lab01_java_bigrams.cnt");
【问题讨论】:
-
什么是
token="valid_tokens.txt"?我不希望这是对“命名参数”的有效使用。您如何从命令行调用该程序?您只能以编写为接受它们的方式将参数传递给程序。至于您显示的错误,“ngram_calcs.PL”中的相关代码是什么(如果需要简化)? -
您不是“向 IPC::System::Simple 提供命名参数”。该模块提供了替换
system内置命令并为该程序提供给它们的命令。 -
我建议您编辑问题并展示这些程序是如何从命令行自行调用的,而无需您正在编写的脚本。您还想显示您正在编写的脚本的代码。