Gegeben
my $t=+"aaa";
Ist es möglich zu überprüfen, ob der Zwang erfolgreich sein wird (ich weiß, dass dies hier nicht der Fall ist), bevor Sie $ t verwenden?
Übrigens: Ich möchte wirklich überprüfen, ob eine Zeichenfolge eine gültige Ganzzahl ist. Ich weiß, dass ich zu diesem Zweck einen regulären Ausdruck verwenden kann, aber ich nehme an, dass es eine einfachere Lösung gibt.
3 Antworten
+'aaa'
führt zu einem Fehler, bei dem es sich um eine Art Null handelt, die einem undefinierten Wert ähnelt. Das heißt, Sie können alles verwenden, was mit ihnen funktioniert.
my $t = +$s with +$s; # $t remains undefined
my $t = +$s // 0; # $t === 0
my $t = (+$s).defined ?? +$s !! 0;
Da Sie nur prüfen möchten, ob es sich um einen Int handelt
my $t = +$s ~~ Int ?? +$s !! 0; # Failures aren't a type of Int
my $t = 0;
with +$s {
when Int { $t = $_ }
default { ... } # +$s is defined
} else {
... # optional else clause
}
Noch eine andere Version:
my $t = +"aaa" orelse note "could not coerce to numeric type";
say $t.^name; # Failure
orelse
ist die Version von //
mit niedriger Priorität. In dieser Version erfolgt die Zuweisung zu $t
weiterhin, aber die Überprüfung auf Definiertheit behandelt den Fehler, dh er wird nicht explodieren und einen Fehler auslösen.
Wickeln Sie es um einen Try-Block, um die Ausnahme abzufangen.
my $t;
try {
$t = +"aaa";
CATCH { say "the coercion didn't work" when X::Str::Numeric; }
}
Verwandte Fragen
Neue Fragen
raku
Bei Fragen zur Programmiersprache Raku (früher bekannt als Perl 6).