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