+
+# Test leave
+
+{
+ my @res = (1, do {
+ leave;
+ 'XXX';
+ }, 2);
+ is "@res", '1 2', 'leave without arguments';
+}
+
+{
+ my @res = (1, do {
+ leave 2, 3;
+ 'XXX';
+ }, 4);
+ is "@res", '1 2 3 4', 'leave with arguments';
+}
+
+{
+ my $s = 'a';
+ local $@;
+ eval {
+ $s =~ s/./leave; die 'not reached'/e;
+ };
+ my $err = $@;
+ my $line = __LINE__-3;
+ like $err,
+ qr/^leave\(\) cannot target a substitution context at \Q$0\E line $line/,
+ 'leave() cannot exit subst';
+}