The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
#!perl

use constant CT_CHECKS => 1;
use constant RT_CHECKS => 1;

package MyClass::Foo;

my $class = __PACKAGE__;

use Class::Root 'isa';

package MyClass::Foo::LOCAL;

use strict;
use warnings;

use Test::More tests => 3;
use English;

declare private ca1 => class_attribute;

#1
can_ok($class, 'MyClass__Foo__ca1');

$class->_ca1 = 10;

#2
is($class->MyClass__Foo__ca1, 10, 'test 2');

declare class_attribute ca2 => 11;

declare overwrite class_init => class_method {
    my $class = shift;
    
    my %args = (
	ca2 => 12,	
    );

    $class->base_class_init( %args );
};

declare;
declare attributes qw( x1 y1 z1 );
declare x2 => setopts { value => 1},
	x3 => 5;

class_initialize;

class_verify;

package main;
use MyClass::Foo;
use Test::More;

#3
is($class->ca2, 12, 'test 3');

__DATA__
declare class_attribute a2 => 10;

#2
is($class->a2, 10, 'declare class_attribute NAME => VALUE;');

declare class_attribute a3 => setopts { value => 5 };

#3
is($class->a3, 5, 'declare class_attribute NAME seropts { value => VALUE };');

declare class_attribute a4;
declare setopts a4 => { value => 15 };

#4
is($class->a4, 15, 'declare class_attribute NAME; declare setopts NAME => { value => VALUE };');

declare a5 => class_attribute setopts { value => 25 };

#5
is($class->a5, 25, 'declare NAME => class_attribute setopts { value => VALUE };');

declare class_attribute a6 => aa;

#6
is($class->a6, "aa", 'declare class_attribute NAME => VALUE;');

declare class_attribute a7; &a7 = 47;

#7
is(&a7, 47, 'declare class_attribute NAME; &NAME = VALUE;');

eval "use declare class_attribute a8; a8 = 48;";

#8
is(&a8, 48, 'use declare class_attribute NAME; NAME = VALUE;');
#isnt($EVAL_ERROR, "", 'FAILED: declare class_attribute NAME; NAME = VALUE;');