Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

What does this statement do?

by Fian7 (Initiate)
on Jun 10, 2010 at 22:23 UTC ( #844137=perlquestion: print w/replies, xml ) Need Help??
Fian7 has asked for the wisdom of the Perl Monks concerning the following question:

Hello, I am trying to read a PERL program, and the following line has me confused - what is it trying to do? unless ($nth =~ /^+-?\d+$/ ) { ##Removed this code to make things simpler## }

Replies are listed 'Best First'.
Re: What does this statement do?
by choroba (Bishop) on Jun 10, 2010 at 22:52 UTC
    Welcome to the Monastery, Fian7. Please, read and try to follow the basic rules: Markup in the Monastery. Also note there is nothing called PERL here, the language is "Perl" and the interpreter is "perl".
    Concerning the code, it should have probably been:
    unless ($nth =~ /^[+-]?\d+$/ ) { ##Removed this code to make things si +mpler## }
    unless means if not (see perlsyn).
    The =~ operator matches (see perlop) the variable $nth against a regular expression, enclosed in slashes.
    To match, a string can (hence ?) start with a plus or minus sign, then it should have one or more (hence +) digits (\d) and nothing more ($).
Re: What does this statement do?
by linuxer (Curate) on Jun 10, 2010 at 22:56 UTC
    The regular expression can be explained, e.g.:
    perl -MYAPE::Regex::Explain -wle ' my $re = qr/^[+-]?\d+$/; print YAPE::Regex::Explain->new($re)->explain();' The regular expression: (?-imsx:^[+-]?\d+$) matches as follows: NODE EXPLANATION ---------------------------------------------------------------------- (?-imsx: group, but do not capture (case-sensitive) (with ^ and $ matching normally) (with . not matching \n) (matching whitespace and # normally): ---------------------------------------------------------------------- ^ the beginning of the string ---------------------------------------------------------------------- [+-]? any character of: '+', '-' (optional (matching the most amount possible)) ---------------------------------------------------------------------- \d+ digits (0-9) (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------
    So, all in all the code checks if the content of $nth contains an integer with or without a prefix (+ or -); if it does not, then the removed code is executed.

    Documentation: perlretut perlre

    edit: hints about s/PERL/Perl/ and code tags removed, as choroba already mentioned it

Re: What does this statement do?
by aquarium (Curate) on Jun 10, 2010 at 23:45 UTC
    I'd (wildly) guess that this is part of a routine that handles numbers with the code provided executing the block of code only when there is not a valid exponent. An exponent is (typically) such a simple number as that being matched, a signed or unsigned (+/-) integer.
    the hardest line to type correctly is: stty erase ^H

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://844137]
Approved by toolic
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2018-01-23 21:07 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (254 votes). Check out past polls.