Dies ist eine wilde Vermutung. Ich denke, was Sie wollen, ist den Dateinamen aus dieser Zeile der Protokolldatei zu erfassen.
use strict;
use warnings;
my @final;
open my $fh, '<', 'sim_success.log' or die "could not open file: $!";
while (my $line = <$fh>) {
chomp $line;
if ($line =~ m/Design: (.+)$/) {
push @final, $1;
}
}
print $final[0]; # will print only the first one
close $fh;
Mal sehen, was ich getan habe. Ein Großteil davon wurde bereits in den Kommentaren von Melpomene zu dieser Frage erläutert. Ich wiederhole einige von ihnen.
- immer
use strict
und use warnings
! Sie helfen Ihnen, Fehler zu erkennen.
grep
tut nicht, was Sie denken. Es dient dazu, Dinge in einer Liste zu finden, die einer Bedingung entsprechen. Deine Liste hatte nur einen Gegenstand. Die Linie.
- können Sie den Operator
m//
direkt verwenden.
- aber man braucht ein Capture-Gruppe
()
, die alles
- und das aufgenommene Material in
$1
erfasst werden, was wir können push
auf das Array
Wenn das Programm fertig ist, das Array @final
enthalten könnte ein oder mehrere Übereinstimmungen Wenn mehr als eine Zeile übereinstimmt, gibt es mehr Einträge im Array.
Wenn wir $ final [1]> Nur ändern wird es wird ... Example2_wrk, muss das in var speichern – Harsh
Sie haben also alle Zeilen gespeichert, die "Design:" im Array '@ final' entsprechen. Das ist eine Variable. Job erledigt? Die Frage scheint nicht zu erfassen, was Sie tatsächlich tun wollen. – bytepusher
Sie wollen also den Weg aus der Linie nehmen? – simbabque