因此,我编写了一个脚本,用于计算4 ^(0)到4 ^(10)的阶乘因子,因为我想测试运行时间,并且我还想比较斯特林的近似值与实际的数字位数的各个阶乘。如何在Perl中打印匹配的下一行?
所以我有这个数据称为factorials.txt 包含例如以下数据的文件:
The factorial of 1 is
1
The factorial of 4 is
24
The factorial of 16 is
20922789888000
The factorial of 64 is
126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
我想阶乘的输出为以下几点:
Factorial 1: 1 digits.
Factorial 4: 2 digits.
Factorial 16: 14 digits.
Factorial 64: 90 digits
我能够编写一个脚本来获取这些值,在我对___阶乘的陈述之后...在下一行是阶乘的值。但是我无法在比赛结束后选择下一行,因此我使用while循环通过匹配字母不存在的文件编写了很多内容,然后在线上打印字符长度。它有效,但我不认为它效率很高。
#!/usr/bin/env perl
use strict;
use warnings;
use feature 'say';
my $file = 'factorials.txt';
my $filehandle;
open($filehandle, '<', $file) or die "Could not open file $_ because $!";
while(my $line = <$filehandle>)
{
chomp $line;
my $index = $.;
if($line !~ m/[a-z]/)
{
say length($line);
}
}
我的脚本中的以下输出,例如:
1
2
14
90
我想解析脚本,如果就行字“阶乘”匹配,打印下一行字符的长度。我相信这一定是可能的,但我似乎无法弄清楚如何去下一条线。
任何想法?非常感谢!
你需要什么的'$ index'? – simbabque
我认为这可能很有用,因为$ index是特殊变量“$”。包含行号。所以如果我打印if($ index == 2){say $ line;},它会打印第2行换行符。但我无法弄清楚如何根据它匹配的行增加索引。 – xyz123
我不确定我是否得到了它 - 你是否想要处理开头显示的文件,所以要将数字的数字追加到'N is'的因子行,但在结果中保留以下行? – zdim