This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Test that literal numbers and strings are read-only
authorFather Chrysostomos <sprout@cpan.org>
Sun, 16 Jun 2013 02:29:27 +0000 (19:29 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Fri, 26 Jul 2013 06:47:58 +0000 (23:47 -0700)
including ${\3}, which currently fails under ithreads (and is hence a
to-do test).

t/op/ref.t

index 8390f19..a9be6ea 100644 (file)
@@ -8,7 +8,7 @@ BEGIN {
 
 use strict qw(refs subs);
 
-plan(230);
+plan(234);
 
 # Test glob operations.
 
@@ -787,6 +787,28 @@ SKIP:{
 
 is ref( bless {}, "nul\0clean" ), "nul\0clean", "ref() is nul-clean";
 
+# Test constants and references thereto.
+for (3) {
+    eval { $_ = 4 };
+    like $@, qr/^Modification of a read-only/,
+       'assignment to value aliased to literal number';
+    require Config;
+    local $::TODO = " " if $Config::Config{useithreads};
+    eval { ${\$_} = 4 };
+    like $@, qr/^Modification of a read-only/,
+       'refgen does not allow assignment to value aliased to literal number';
+}
+for ("4eounthouonth") {
+    eval { $_ = 4 };
+    like $@, qr/^Modification of a read-only/,
+       'assignment to value aliased to literal string';
+    require Config;
+    local $::TODO = " " if $Config::Config{useithreads};
+    eval { ${\$_} = 4 };
+    like $@, qr/^Modification of a read-only/,
+       'refgen does not allow assignment to value aliased to literal string';
+}
+
 # Bit of a hack to make test.pl happy. There are 3 more tests after it leaves.
 $test = curr_test();
 curr_test($test + 3);