[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>
wrote: 

: Why doesn't this work to check the <STDIN> until it is one of the
: numbers "1 2 3 4 5" ?? I have tried multiple variations of this with
: different brackets ie. [ ] , and ( ) .

    List::MoreUtils exports a function named 'any'. It will allow
you to set a condition using $_ for each value in the list.


use List::MoreUtils 'any';

my $type_number = 0;
until ( any { $type_number == $_ } 1 .. 5 ) {




    A more straight forward, less flexible method involves using
the 'any' function from Quantum::Superpositions.

use Quantum::Superpositions 'any';

my $type_number = 0;
until ( $type_number == any( 1 .. 5 ) ) {


    One advantage to this solution is the scalar result of 'any'.
Here is a very readable solution without comments.

use Quantum::Superpositions 'any';

my $valid_type = any( 1 .. 5 );

my $type = 0;
until ( $type == $valid_type ) {


    A more generic solution might look like this.


#!/usr/bin/perl

use strict;
use warnings;

use Quantum::Superpositions 'any';

my $type_number = type_number(
                    [
                        'Virus',
                        'Spam',
                        'Hacking',
                        'Copyright',
                        'Child Pornography',
                    ]
);

sub type_number {
    my $types = shift;

    my $valid_type = any( 1 .. @$types );

    my @options = map "$_. $types->[ $_ - 1 ]\n", 1 .. @$types;

    my $attempts = 0;
    my $type_number = 0;

    while (1) {

        print
            'Enter the number that corresponds to the type of',
            " offense you would like a report for\n",
            @options;

        chomp( $type_number = <STDIN> );

        return $type_number if $type_number == $valid_type;

        last if ++$attempts > 10;

    }

    # Return undef on failure
    # This could also be used to die with a usage message
    return;
}


__END__


    This makes it easy to add options. Try the above with this.

my $type_number = type_number(
                    [
                        'Virus',
                        'Spam',
                        'Hacking',
                        'Copyright',
                        'Child Pornography',
                        'Added option',
                    ]
);


HTH,

Charles K. Clarkson
-- 
Mobile Homes Specialist
254 968-8328












-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to