teclado sintaxis sentencia programando por herencia funciones entrada ejemplos con perl parsing input module numbers

sintaxis - sentencia perl



¿Hay un módulo Perl para analizar números, incluidos los rangos? (1)

¿Hay algún módulo que haga esto por mí?

sample_input: 2, 5-7, 9, 3, 11-14

#!/usr/bin/env perl use warnings; use strict; use 5.012; sub aw_parse { my( $in, $max ) = @_; chomp $in; my @array = split ( //s*,/s*/, $in ); my %zahlen; for ( @array ) { if ( /^/s*(/d+)/s*$/ ) { $zahlen{$1}++; } elsif ( /^/s*(/d+)/s*-/s*(/d+)/s*$/ ) { die "''$1-$2'' not a valid input $!" if $1 >= $2; for ( $1 .. $2 ) { $zahlen{$_}++; } } else { die "''$_'' not a valid input $!"; } } @array = sort { $a <=> $b } keys ( %zahlen ); if ( defined $max ) { for ( @array ) { die "Input ''0'' not allowed $!" if $_ == 0; die "Input ($_) greater than $max not allowed $!" if $_ > $max; } } return /@array; } my $max = 20; print "Input (max $max): "; my $in = <>; my $out = aw_parse( $in, $max ); say "@$out";


Una búsqueda de CPAN para number range me da esto, que se parece bastante a lo que estás buscando:

Número :: Rango

Aquí hay un ejemplo de cómo puede usar el módulo en su función aw_parse :

$in =~ s//s+//g; # remove spaces $in =~ s/(?<=/d)-/../g; # replace - with .. my $range = new Number::Range($in); # create the range my @array = sort { $a <=> $b } $range->range; # get an array of numbers

Aplicado a la muestra de la pregunta:

Input (max 20): 2, 5-7, 9, 3, 11-14 2 3 5 6 7 9 11 12 13 14