$new_contents .= $self->substitute_vars(substr($contents, 0, $pos_if), @indices);
substr($contents, 0, $pos_if) = "";
- # if ($contents !~ m|^$self->{tag_start_qm}if\s*(not)?\s+(.*?)$self->{tag_end_qm}|) {
- if ($contents !~ m/^$self->{tag_start_qm}
+ if ($contents !~ m/^$self->{tag_start_qm}if
\s*
- (not|\!)? # $1 -- Eventuelle Negierung
- \s*
- ([^\s]+) # $2 -- Name der zu überprüfenden Variablen
+ (not\b|\!)? # $1 -- Eventuelle Negierung
+ \s+
+ (\b.+?\b) # $2 -- Name der zu überprüfenden Variablen
( # $3 -- Beginn des optionalen Vergleiches
\s*
- ([!=])= # $4 -- Art des Vergleiches speichern
+ ([!=]) # $4 -- Negierung des Vergleiches speichern
+ ([=~]) # $5 -- Art des Vergleiches speichern
\s*
- ( # $5 -- Gequoteter String oder Bareword
- "(.*)(?<!\\)" # $6 -- Gequoteter String -- direkter Vergleich mit eq bzw. ne; Escapete Anführungs als Teil des Strings belassen
+ ( # $6 -- Gequoteter String oder Bareword
+ "(.*?)(?<!\\)" # $7 -- Gequoteter String -- direkter Vergleich mit eq bzw. ne oder Patternmatching; Escapete Anführungs als Teil des Strings belassen
|
- ([^\s]+) # $7 -- Bareword -- als Index für $form benutzen
+ (\b.+?\b) # $8 -- Bareword -- als Index für $form benutzen
)
)?
\s*
return undef;
}
- my $not = $1;
- my $var = $2;
- my $operator = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt
- my $quoted = $5; # nur gültig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %>
- my $bareword = $7; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %>
+ my $not = $1;
+ my $var = $2;
+ my $operator_neg = $4; # '=' oder '!' oder undef, wenn kein Vergleich erkannt
+ my $operator_type = $5; # '=' oder '~' für Stringvergleich oder Regex
+ my $quoted_word = $7; # nur gültig, wenn quoted string angegeben (siehe unten); dann "value" aus <%if var == "value" %>
+ my $bareword = $8; # undef, falls quoted string angegeben wurde; andernfalls "othervar" aus <%if var == othervar %>
- $not = !$not if ($operator && $operator eq '!');
+ $not = !$not if ($operator_neg && $operator_neg eq '!');
substr($contents, 0, length($&)) = "";
my $value = $self->_get_loop_variable($var, 0, @indices);
my $hit = 0;
- if ($operator) {
- my $compare_to = $bareword ? $self->_get_loop_variable($bareword, 0, @indices) : $quoted;
- $hit = ($not && !($value eq $compare_to)) || (!$not && ($value eq $compare_to));
+ if ($operator_type) {
+ my $compare_to = $bareword ? $self->_get_loop_variable($bareword, 0, @indices) : $quoted_word;
+ if ($operator_type eq '=') {
+ $hit = ($not && !($value eq $compare_to)) || (!$not && ($value eq $compare_to));
+ } else {
+ $hit = ($not && !($value =~ m/$compare_to/)) || (!$not && ($value =~ m/$compare_to/));
+ }
} else {
- $hit = ($not && ! $value) || (!$not && $value);
+ $hit = ($not && ! $value) || (!$not && $value);
}
if ($hit) {