Perl中的除法脚本

Perl中的除法脚本,perl,division,Perl,Division,我对Perl中的脚本有问题 我有一个文本文件作为输入 Hello -> good 0.1 0.2 0.3 Hello -> morning 1 2 0.6 脚本将分区如下:(输出) 这是我当前的脚本: #!/usr/bin/perl use strict; use warnings; use feature qw(:5.10); my ($fichier1) = "fichier1.txt"; open my $FIC1, "<", $fichier1, or die

我对Perl中的脚本有问题

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

Hello -> good 0.1 0.2 0.3
Hello -> morning 1 2 0.6
脚本将分区如下:(输出)

这是我当前的脚本:

#!/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;
#/usr/bin/perl
严格使用;
使用警告;
使用功能qw(:5.10);
my($fichier1)=“fichier1.txt”;
打开我的$FIC1,“resultat.txt”);
while(我的$line1=){
chomp$line1;
我的(($textext,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值1美元,价值3美元,3美元,4美元)如果如果线路1美元1.7 7 7月1日,如果如果线路1 7 7 7月1号线1,([a-a-a-扎扎扎扎扎日19 19 19 19 19 19 19 19 19 19日日19 19 19 19 19 19 19 19 19日日日19 19 19 19日日日在在在19 19 19 19日日19 19 19日日日日日日各各各19 19十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九十九日日日日日日日日日在在在在在各各各各2009 2009 2009 2009 2009 2009 2009 2009日日日日日日日日日日日日日日日日日日日日)([.\d]+)$/;
my$tot_val1=sprintf(“%.15f”,$value1*$value2);
my$tot_val2=sprintf(“%.15f”,$value2*$value3);
打印“$texte$tot_val2\n”;
打印FICHIERNOUVELLES“$texte($tot_val2)\n”;
}
关闭FICHIERNOUVELLES;
关闭$FIC1;
我的脚本中有两个错误:

“在连接(.)或字符串中使用未初始化的值$texte” perl.pl第18行,第1行

在perl.pl的乘法(*)中使用未初始化的值$value2 第14行,第2行

有什么想法吗? 非常感谢

问题:

您尝试检索捕获4次:

($1, $2, $3, $4)
但是您的正则表达式中只有2个捕获组

捕获组是您在正则表达式中放入的
()


一个好的开始是阅读你的代码与你的问题不符,所以我很难理解你在这里需要什么

Hello |||good ||| 0.1/0.2 0.2/0.3 2.718
在您的输出中,但您的代码将值相乘。而且我不知道
2.718
从何而来(它只是e的值吗?)

但是,您应该使用
split
将数据分隔为列。这段代码说明了这一点

$tot_val2
的值不会显示,因为这是您自己的代码中的值。此外,我不确定您是想要第一个文本字段还是第二个文本字段。我已经显示了第一个文本字段。如果需要,第二个文本字段位于
$colonnes[0]

use strict;
use warnings;
use autodie;
use 5.010;

my ($fichier1) = 'fichier1.txt';

open my $fic1, '<', $fichier1;
open my $fn,   '>', 'resultat.txt';

while (<$fic1>) {
    my ($texte, $reste) = split /\s*->\s*/;
    my @colonnes = split ' ', $reste;
    my ($value1, $value2, $value3) = @colonnes[1..3];

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

    print "$texte $tot_val2\n";
    print $fn "$texte ($tot_val2)\n";
}

close $fn;

这是Claire comme le cul de d'Oussamaá200 pieds de fonds dans la mer noire.有什么问题吗?或者我们必须猜测出哪里出了问题,您期望什么?我的脚本中有两个错误“在连接(.)中使用未初始化值$texte或在perl.pl第18行第1行使用字符串”。使用未初始化的价值$val值2美元未初始化的价值$val值2美元在乘法中使用(*)在perl.pl第14行,第2行。把这个放在你原来的帖子中,所以我不得不改变这部分<代码>第1行1=//((a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-a-Z-a-Z-19 19-19-19 19 19 19日日日19 19 19 19 19 19 19 19 19 19 19日日19 19 19 19 19岁岁19 19 19 19日日19 19 19 19 19 19日19 19日19日19 19日19日19日19 19日19日19日19日19 19 19日19日19 19日19日19日19日19 19日19日19日19日19日19 19日19日19日19日19日19日19日19日19日19 19#-%&*s]+([.\d]+)$/?如果你认为答案有用,你可以“投票”它。如果您认为答案回答得很好,您可以通过单击
复选标记
(将为绿色)的大纲来“接受”它,这样,搜索stackexchange网站的人就会知道问题得到了很好的回答。这就是stackechange网站的工作原理,谢谢;)投票需要15个声誉;)@CyrineEzzahra也许您应该研究预定义角色类的使用,而不是尝试构建自己的角色类。这看起来很可怕<代码
use strict;
use warnings;
use autodie;
use 5.010;

my ($fichier1) = 'fichier1.txt';

open my $fic1, '<', $fichier1;
open my $fn,   '>', 'resultat.txt';

while (<$fic1>) {
    my ($texte, $reste) = split /\s*->\s*/;
    my @colonnes = split ' ', $reste;
    my ($value1, $value2, $value3) = @colonnes[1..3];

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

    print "$texte $tot_val2\n";
    print $fn "$texte ($tot_val2)\n";
}

close $fn;
Hello 0.060000000000000
Hello 1.200000000000000