Thread Match Pattern über mehrere Zeilen (3 answers)
Opened by bora99 at 2020-11-13 23:11

haj
 2020-11-14 02:08
#192966 #192966
User since
2015-01-07
531 articles
BenutzerIn

user image
Ja, der Flip-Flop ist etwas gewöhnungsbedürftig, aber genau für solche Fälle gemacht:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
use 5.020;
use strict;
use warnings;

my $TestFile = "testfile";

open (my $tfh,'<',$TestFile)
    or die "Test File '$TestFile' kann nicht gelesen werden: '$!' !\n";

my @found_arr = (); # nicht %found_arr - das wäre ein Hash

while (my $line = <$tfh>) {
    chomp $line;
    push @found_arr, $line if ($line =~ /\(/ .. $line =~ /\)/);
}

# In Perl kann man eine Schleife über ein Array sehr einfach schreiben:
for my $found (@found_arr) {
    say $found;
}

Und immer dann, wenn man in einer Schleife von einem Array in ein anderes schaufelt, kommen die Perl-Funktionen map und grep sehr gelegen. Hier ist es grep:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use 5.020;
use strict;
use warnings;

my $TestFile = "testfile";

open (my $tfh,'<',$TestFile)
    or die "Test File '$TestFile' kann nicht gelesen werden: '$!' !\n";

my @found_arr = grep { /\(/ .. /\)/ } <$tfh>;
chomp (@found_arr);

say for @found_arr;

Bei say habe ich ausgenützt, dass Perl $_ als Standard-Variable verwendet. Bei solchen sehr kurzen Schleifen halte ich das für sinnvoll.

View full thread Match Pattern über mehrere Zeilen