File: ro.pm

package info (click to toggle)
libkavorka-perl 0.036-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 712 kB
  • ctags: 213
  • sloc: perl: 2,865; makefile: 25
file content (38 lines) | stat: -rw-r--r-- 561 bytes parent folder | download
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
use 5.014;
use strict;
use warnings;

package Kavorka::TraitFor::Parameter::ro;

our $AUTHORITY = 'cpan:TOBYINK';
our $VERSION   = '0.036';

use Moo::Role;

around _injection_assignment => sub
{
	my $next = shift;
	my $self = shift;
	my ($sig, $var, $val) = @_;
	
	my $str = $self->$next(@_);
	
	$str .= sprintf(
		'&Internals::SvREADONLY(\\%s, 1);',
		$var,
	);
	
	return $str;
};

after sanity_check => sub
{
	my $self = shift;
	
	my $traits = $self->traits;
	my $name   = $self->name;
	
	croak("Parameter $name cannot be rw and ro") if $traits->{rw};
};

1;