File: readonly.t

package info (click to toggle)
perl 5.32.1-4%2Bdeb11u3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 113,408 kB
  • sloc: ansic: 641,443; perl: 491,650; sh: 70,967; pascal: 8,354; cpp: 4,103; xml: 2,428; makefile: 2,237; yacc: 1,173; lisp: 1
file content (43 lines) | stat: -rw-r--r-- 911 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!./perl

use strict;
use warnings;

use Scalar::Util qw(readonly);
use Test::More tests => 11;

ok( readonly(1), 'number constant');

my $var = 2;

ok( !readonly($var), 'number variable');
is( $var, 2, 'no change to number variable');

ok( readonly("fred"), 'string constant');

$var = "fred";

ok( !readonly($var),  'string variable');
is( $var, 'fred', 'no change to string variable');

$var = \2;

ok( !readonly($var), 'reference to constant');
ok( readonly($$var), 'de-reference to constant');

ok( !readonly(*STDOUT), 'glob');

sub try
{
    my $v = \$_[0];
    return readonly $$v;
}

$var = 123;
{
    # This used not to work with ithreads, but seems to be working since 5.19.3
    local $TODO = ( $Config::Config{useithreads} && $] < 5.019003 ) ?
      "doesn't work with threads" : undef;
    ok( try ("abc"), 'reference a constant in a sub');
}
ok( !try ($var), 'reference a non-constant in a sub');