summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2021-02-10 12:43:14 +0000
committerPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2021-02-14 13:40:50 +0000
commit7bf2a704fb5fd949e313411896af9e6e6aef8e44 (patch)
tree0463de711094ac6a7caa208161f56e0e5b32612d
parent6b729d2440b795f848f610a8cc410a3f6be6388b (diff)
downloadperl-7bf2a704fb5fd949e313411896af9e6e6aef8e44.tar.gz
Unit-test that try{return} within :lvalue sub behaves correctly (GH#18553)
-rw-r--r--t/op/try.t24
1 files changed, 24 insertions, 0 deletions
diff --git a/t/op/try.t b/t/op/try.t
index 90702fe958..fe17a1ff42 100644
--- a/t/op/try.t
+++ b/t/op/try.t
@@ -195,4 +195,28 @@ no warnings 'experimental::try';
}
}
+# return from try is correct even for :lvalue subs
+# https://github.com/Perl/perl5/issues/18553
+{
+ my $scalar;
+ sub fscalar :lvalue
+ {
+ try { return $scalar }
+ catch ($e) { }
+ }
+
+ fscalar = 123;
+ is($scalar, 123, 'try { return } in :lvalue sub in scalar context' );
+
+ my @array;
+ sub flist :lvalue
+ {
+ try { return @array }
+ catch ($e) { }
+ }
+
+ (flist) = (4, 5, 6);
+ ok(eq_array(\@array, [4, 5, 6]), 'try { return } in :lvalue sub in list context' );
+}
+
done_testing;