/ / Perl: zmienna String na Scalar - perl

Perl: zmienna String na Scalar - perl

Czy ktoś może mi pomóc z następujących czynności: Chcę wyodrębnić wartości liczbowe z pliku wejściowego i wykonać operacje matematyczne.

Wprowadź przykład pliku

    string txt
text0 = 40,
text1 = 2;
string text1 txt

Chcę zebrać text0 i text1 do zmiennych o tej samej nazwie i

wydrukuj "$ text0 / text1";

na końcu odczytu pliku. Należy pamiętać, że tekst1 jest częścią łańcucha innej części pliku i należy go zignorować.

Pracowałem z tym kodem, ale nie udało mi się z powodu "text1" w innych częściach kodu,

   while (<PH>) {
chomp;
if ($_ =~ "text0") {
my $data = $_;
my @temp = split (" ", $data);
$text0 = $temp[2];
$text0 =~ s/,//;
}
if ($_ =~ "text1") {
my $data = $_;
my @temp = split (" ", $data);
$text1 = $temp[2];
$text1 =~ s/;//;

}
}
my $final = $text0/text1;
print "$finaln";

Każda poprawa mojego podstawowego kodu również byłaby aprobowana.

pozdrowienia

Odpowiedzi:

0 dla odpowiedzi № 1

Przynajmniej musisz umieścić kotwicę na "początek linii" (która jest karetą) w teście:

if ($_ =~ "^text0") {

i

if ($_ =~ "^text1") {

0 dla odpowiedzi nr 2
perl -lne "$1==1?(print $a/$2):($a=$2) if(/text([0-1]) = ([d]+)/);" your_file

0 dla odpowiedzi № 3

Ten fragment odczytuje twoją linię wejściową po linii i przypisze następne cyfry text0 = do zmiennej $text1 jeśli znaleziono dopasowanie i to samo dla text1. Następnie drukuje obie zmienne poza pętlą:

use warnings;
use strict;

open my $input, "<", "in.txt";

my ($text1, $text2);
while(<$input>){
chomp;
($text1) = $1 if /text0 = (d+)/;
($text2) = $1 if /text1 = (d+)/;
}

print "Text0 = $text1nText1 = $text2n";