在Perl脚本中使用命令?

时间:2016-09-05 22:34:18

标签: perl input scripting output primes

我尝试在脚本中运行perl命令,这是我得到的:

filenumber1.txt:

94088076164765675

命令窗口看起来没问题:

C:\ Users \ Guest \ Documents \ Prime Numbers> perl -Mntheory =:all -nE“chomp; say next_prime($ _);” filenumber1.txt

94088076164765687

我试图在一个名为primenumbers.pl的脚本中执行此操作,并生成另一个名为log.txt的文件作为输出文件,并将filenumber1.txt作为输入文件:

    #!/usr/bin/env perl
    use warnings;
    use strict;
    use feature 'say';
    use ntheory ":all";

# open filehandle log.txt
open (my $LOG, '>>', 'log.txt');
# select new filehandle
select $LOG;

    perl -Mntheory=:all -nE "chomp; say next_prime($_);" filenumber1.txt

primenumbers.pl与filenumbers.txt位于同一目录中,当我运行脚本时出现问题并且我不知道是什么:

C:\ Users \ Guest \ Documents \ Prime Numbers> perl primenumbers.pl

Bareword找到了运营商在primenumbers.pl第7行的预期位置,靠近“”说next_prime($ _);“filenumber1.txt”

    (Missing operator before filenumber1.txt?)
在primenumbers.pl第7行的

语法错误,靠近“”说next_prime($ _);“filenumber1.txt”

由于编译错误,primenumbers.pl的执行中止。

我自己尝试修复它,但我只是让事情变得更糟,并且还有更多问题要解决。有没有人知道如何从这里帮助我请生成输出文件“log.txt”而不查看输入文件“filenumber1.txt”?提前谢谢。

1 个答案:

答案 0 :(得分:2)

-n切换到perl只是将代码包装在while (<>) { ... }中,因此,为了在您自己的程序中获得类似的效果,只需自己添加循环(未经测试的代码;可能包含错误):

#!/usr/bin/env perl
use warnings;
use strict;
use feature 'say';
use ntheory ":all";

# open filehandle log.txt
open (my $LOG, '>>', 'log.txt');
# select new filehandle
select $LOG;

while (<>) {
  chomp; say next_prime($_);
}

使用

运行此功能
primenumbers.pl filenumber1.txt

你应该被设置。