perl - Perl 中的除法脚本

标签 perl division

我的 Perl 脚本有问题。

我有一个文本文件作为输入

Hello -> good 0.1 0.2 0.3
Hello -> morning 1 2 0.6

脚本进行这样的划分:(输出)

Hello |||good ||| 0.1/0.2 0.2/0.3 2.718
Hello ||| morning ||| 1/2 2/0.6 2.718

这是我当前的脚本:

#!/usr/bin/perl

use strict;
use warnings;

use feature qw(:5.10);
my ($fichier1) = "fichier1.txt";

open my $FIC1, "<", $fichier1, or die "impossible ouvrir $fichier1 $! \n";
open(FICHIERNOUVELLES, ">resultat.txt");

while (my $line1 = <$FIC1>) {
    chomp $line1;
    my ($texte, $value1, $value2, $value3) = ($1, $2, $3, $4) if $line1 =~ /^([a-zA-ZÀÁÂÃÄÅÇÈÉÊËÌÍÎÏñœ=ÒÓÔÕÑÖæñßÙÚÛÜÝàáâãäåçèéêëìíîïðòóô-õöùúûüý@#-%&*_\s]+)([.\d]+)$/;

    my $tot_val1 =sprintf("%.15f", $value1 * $value2);
    my $tot_val2 =sprintf("%.15f", $value2 * $value3);

    print "$texte $tot_val2\n";
    print FICHIERNOUVELLES "$texte ($tot_val2)\n";
}
close FICHIERNOUVELLES;
close $FIC1;

我的脚本中有 2 个错误:

"Use of uninitialized value $texte in concatenation (.) or string at perl.pl line 18, line 1.

Use of uninitialized value $value2 in multiplication (*) at perl.pl line 14, line 2.

请问有什么想法吗? 非常感谢

最佳答案

问题:

您尝试检索捕获内容 4 次:

($1, $2, $3, $4)

但是您的正则表达式中只有 2 个捕获组。

捕获组是您在正则表达式的 () 中放置的内容。

阅读 perldoc perlretut 是一个好的开始

关于perl - Perl 中的除法脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16387317/

相关文章:

regex - Perl 未能说明 `Variable length lookbehind not implemented`

ruby - 在 Win32 上,如何使用 Perl、Python 或 Ruby(或 C)检测是否按下了 Left Shift 或 Right ALT?

c - Left Shift 和 Right Shift 防止除法丢失

c - 在不更改 x87 寄存器的情况下进行十进制除法

java - 我应该在 Java 中进行位移除以 2 吗?

php - 确保股息大于除数的功能?

mysql - MySQL中样本之间的划分

perl - 如何在 Perl 字符串中转义类似代码的东西?

linux - 短脚本、长模块还是长脚本、短模块?

regex - 格式化 perl 正则表达式捕获组