Sub-Starter
view release on metacpan or search on metacpan
lib/Sub/Starter.pm view on Meta::CPAN
if( $returns =~ m{ \A ( ([^\|]*) \| )? \( (.*?) \) \z }msx ){
$parsed->{-returns_alternate} = $2;
my $list = $3;
if( $parsed->{-returns_alternate} ){
$parsed->{-returns_alternate} = { _parse_variable( $parsed, $parsed->{-returns_alternate} ) };
croak "alternative return variable is not a scalar" if $parsed->{-returns_alternate}{-type} ne 'scalar';
}
for my $var ( split m{ \, }msx, $list ){
if( $seen{$var} ++ ){
croak "Return parameter $var repeated";
}
my %attr = _parse_variable( $parsed, $var );
push @{ $parsed->{-returns} }, { %attr };
if( $attr{-type} eq 'array' or $attr{-type} eq 'hash' ){
croak "array or hash may only occur at end of returns list" if $list_var ++;
}
}
}elsif( $returns =~ m{ \A ([^\|]*) \| (.*?) \z }msx ){
lib/Sub/Starter.pm view on Meta::CPAN
my $param_part = shift @_;
my $opt_params = '';
my $list_var = 0;
my %seen = ();
if( $param_part =~ m{ \A ([^;]*) \; (.*) }msx ){
$param_part = $1;
$opt_params = $2;
}
for my $param ( split m{ \, }msx, $param_part ){
if( $seen{$param} ++ ){
die "Parameter $param repeated\n";
}
my %attr = _parse_variable( $parsed, $param );
push @{ $parsed->{-parameters} }, { %attr };
if( $attr{-type} eq 'array' or $attr{-type} eq 'hash' ){
die "array or hash may only occur at end of parameter list" if $list_var ++;
}
}
for my $param ( split m{ \, }msx, $opt_params ){
if( $seen{$param} ++ ){
die "Parameter $param repeated\n";
}
my %attr = _parse_variable( $parsed, $param );
push @{ $parsed->{-parameters} }, { optional=>1, %attr };
if( $attr{-type} eq 'array' or $attr{-type} eq 'hash' ){
die "array or hash may only occur at end of parameter list" if $list_var ++;
}
}
lib/Sub/Starter.pm view on Meta::CPAN
my $template = shift @_;
my $text = '';
for my $template_line ( @$template ){
my $line = $template_line; # copy to modify
if( $line =~ m{ \A (.*?) \e\[1m \( ([^\)]*) \) \e\[0?m (.*) }msx ){
my $front = $1;
my $item = $2;
my $back = $3;
my ( $directive, @arguments ) = split m{ \s+ }msx, $item;
my $expansion; # array reference
if( exists $Expand{$directive} ){
$expansion = &{ $Expand{$directive} }( $self, @arguments );
}else{
carp "no expansion for '$directive'";
next;
}
for my $expanded ( @$expansion ){
( run in 0.836 second using v1.01-cache-2.11-cpan-71847e10f99 )