Lassen Sie uns dieses Programm betrachten:
#!/usr/bin/env perl
use 5.014;
use strict;
use warnings;
my $file = <<END_FILE;
* Action : Lorem ipsum
* Dolor oktam
* Lorem lorem
*
* Input : var1
* var2
* var3
*
* Output : var4
* var5
* var6
END_FILE
$_ = $file;
my ($action, $input) = ('', '');
if (/action\s+:\s*((.|\r\n|\n)*?)(\r\n|\n).*\s*input/gi) {
say "Action: $1";
}
# Nichts erfassen
if (/input\s+:\s*((.|\r\n|\n)*?)(\r\n|\n).*\s*output/gi) {
say "Input: $1";
}
# Aber dieses Mal funktioniert es
if ($file =~ /input\s+:\s*((.|\r\n|\n)*?)(\r\n|\n).*\s*output/gi) {
say "Input OK: $1";
}
# Und $_ unterscheidet sich nicht von $file
die "WTF!" unless $_ eq $file;
Ich möchte Informationen nach "Action", "Input" und "Output" extrahieren. Das Seltsame passiert, wenn ich versuche, die Informationen nach "Input" zu erhalten. Wenn ich $_
verwende, stimmt der Regex nichts überein, aber es funktioniert, wenn ich $file
verwende, obwohl $_ eq $file
Woher kommt mein Problem?
Die Ausgabe, die ich erhalte, ist diese:
Action: Lorem ipsum
* Dolor oktam
* Lorem lorem
*
Input OK: var1
* var2
* var3
*