Commit | Line | Data |
1bfb5477 |
1 | #!./perl |
2 | |
f4a2945e |
3 | BEGIN { |
1bfb5477 |
4 | unless (-d 'blib') { |
f4a2945e |
5 | chdir 't' if -d 't'; |
6 | @INC = '../lib'; |
6b05f64e |
7 | require Config; import Config; |
1bfb5477 |
8 | keys %Config; # Silence warning |
6b05f64e |
9 | if ($Config{extensions} !~ /\bList\/Util\b/) { |
10 | print "1..0 # Skip: List::Util was not built\n"; |
11 | exit 0; |
12 | } |
1bfb5477 |
13 | } |
f4a2945e |
14 | } |
15 | |
16 | use Scalar::Util qw(readonly); |
19d9c0e4 |
17 | use Test::More tests => 11; |
f4a2945e |
18 | |
cf083cf9 |
19 | ok( readonly(1), 'number constant'); |
f4a2945e |
20 | |
21 | my $var = 2; |
22 | |
cf083cf9 |
23 | ok( !readonly($var), 'number variable'); |
24 | is( $var, 2, 'no change to number variable'); |
f4a2945e |
25 | |
cf083cf9 |
26 | ok( readonly("fred"), 'string constant'); |
f4a2945e |
27 | |
28 | $var = "fred"; |
29 | |
cf083cf9 |
30 | ok( !readonly($var), 'string variable'); |
31 | is( $var, 'fred', 'no change to string variable'); |
f4a2945e |
32 | |
33 | $var = \2; |
34 | |
cf083cf9 |
35 | ok( !readonly($var), 'reference to constant'); |
36 | ok( readonly($$var), 'de-reference to constant'); |
f4a2945e |
37 | |
cf083cf9 |
38 | ok( !readonly(*STDOUT), 'glob'); |
19d9c0e4 |
39 | |
40 | sub try |
41 | { |
42 | my $v = \$_[0]; |
43 | return readonly $$v; |
44 | } |
45 | |
46 | $var = 123; |
db8130dd |
47 | { |
48 | local $TODO = $Config::Config{useithreads} ? "doesn't work with threads" : undef; |
49 | ok( try ("abc"), 'reference a constant in a sub'); |
50 | } |
19d9c0e4 |
51 | ok( !try ($var), 'reference a non-constant in a sub'); |