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 )