Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Test if list is range

by DeepThought (Initiate)
on Sep 29, 2012 at 11:17 UTC ( #996362=perlquestion: print w/ replies, xml ) Need Help??
DeepThought has asked for the wisdom of the Perl Monks concerning the following question:

Can I test if a variable is either a [1, 2, 3 ] list or a [1 .. 3 ] range?

Thanks
Tilman

Comment on Test if list is range
Re: Test if list is range
by LanX (Canon) on Sep 29, 2012 at 11:33 UTC
    please use <code> tags!

    No, there is (unfortunately) no range datatype, the range operator does only create a list in list context.

    If you need ranges as types , consider creating an object or tie handling the behavior you want.

    You could also try one of the cpan modules for ranges.

    Cheers Rolf

      There might be a way

      $ perl -MO=Deparse -e " use Data::Dump; dd [ 1,2,3 ] " use Data::Dump; dd([1, 2, 3]); -e syntax OK $ perl -MO=Deparse -e " use Data::Dump; dd [ 1..3 ] " use Data::Dump; dd([1..3]); -e syntax OK
        for this you need to know where in the source an array variable was set ....

        Its like trying to determine if ones grandparents where married by screening his bloodsample.

        Cheers Rolf

Re: Test if list is range
by Kenosis (Priest) on Sep 29, 2012 at 15:05 UTC

    Perhaps Perl's (v5.10+) smart-match operator can help:

    use strict; use warnings; my @array = qw/1 2 3/; print 'The variable is ' . ( is123(@array) ? '' : 'not ' ) . '[1 .. 3] +.'; sub is123 { @_ ~~ [ 1 .. 3 ] }

    Output:

    The variable is [1 .. 3].

      Hm, I guess I could use the first and last element of a array and create a range with that which I can compare against the array like this to see if it is identical.

      But I think I will just ignore the problem and expect the user to tell me what he wants. The range operator would have been very nice meta programming syntax sugar though.

      I wanted to use it for data validations where for a test a user could pass a list or range of valid entries. But of course for a range I don't want to actually test every element just a few within the range.

      Thanks for all your answers

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://996362]
Approved by LanX
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (2)
As of 2014-09-21 00:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (165 votes), past polls