Image-DS9
view release on metacpan or search on metacpan
lib/Image/DS9/Parser.pm view on Meta::CPAN
package Image::DS9::Parser;
# ABSTRACT: Parser driver
use v5.10;
use strict;
use warnings;
our $VERSION = 'v1.0.1';
our @CARP_NOT = qw( Image::DS9::Command );
use Image::DS9::PConsts;
use Ref::Util qw( is_arrayref is_coderef is_hashref is_ref is_regexpref );
use Log::Any '$log';
use namespace::clean;
## no critic (Modules::ProhibitMultiplePackages)
{
package #
Image::DS9::Parser::Value;
sub new {
my ( $class, $token, $valref, $extra ) = @_;
return bless {
token => $token,
valref => $valref,
extra => $extra,
}, $class;
}
sub token { $_[0]{token} }
sub valref { $_[0]{valref} }
sub extra { $_[0]{extra} }
sub has_extra { defined $_[0]{extra} }
sub is_ephemeral { $_[0]->token->is_ephemeral }
sub is_rewrite { $_[0]->token->is_rewrite }
sub cvt_from_get {
my $self = shift;
die if @_;
return $self->token->cvt_from_get( $self->valref );
}
sub cvt_for_set {
my $self = shift;
die if @_;
return $self->token->cvt_for_set( $self->valref );
}
}
sub _croak {
require Carp;
my $fmt = shift;
@_ = sprintf( $fmt, @_ );
goto \&Carp::croak;
}
sub parse_spec { ## no critic (Subroutines::ProhibitExcessComplexity)
my $command = shift;
my $specs = shift;
# $log->debug( "parsing: ", { cmd => $command, args => \@_ } );
# keep the rest of the args in @_, so don't copy data
my %match;
( run in 0.985 second using v1.01-cache-2.11-cpan-39bf76dae61 )