batooh: Geht das? my @arr = ($text =~ m/regex/) || (0)

Beitrag lesen

Hallo.

my ($zahl) = $text =~ /Total:(\d+)/ || (0);
Bei diesem Konstrukt kommt _immer_ "$zahl = 1" heraus, wenn der Regex matcht. Nur wenn er nicht matcht, bringt er "$zahl = 0", so wie ich mir das vorstelle.

Die Variable $zahl erhält nur die Werte 1 und 0, weil vor der Zuweisung der gesamte logische Ausdruck ausgewertet wird. Das was du geschrieben hast, ist das selbe wie das hier:

my $zahl = ($text =~ /Total:(\d+)/ || 0);

Alternativ könntest du statt des "||" einfach den Operator "or" verwenden, dessen Rang [1] ist nämlich niedriger als der einer Zuweisung:

my ($zahl) = ($text =~ /Total:(\d+)/) or (0);

Oder du machst es dir noch einfacher (und lesbarer):

my $zahl = $text =~ /Total:(\d+)/ ? $1 : 0;

Ich hoffe das hilft dir weiter. :-)

Schöne Grüße.

[1] http://de.selfhtml.org/perl/sprache/operatoren.htm#rangfolge