> -----Original Message-----
> From: Darren Simpson [mailto:[EMAIL PROTECTED]]
> Sent: Thursday, February 07, 2002 11:17 AM
> To: Perl List
> Subject: RE: simple question
> 
> 
> 
> what do the below actually do? they look like dutch to me
> $VisaCard = /^4\d{15}/;

/^4\d{15}/ is a regular expression match operation. Documented
in "perldoc perlop" starting at a heading that looks like this:

   m/PATTERN/cgimosx

Since neither the =~ nor !~ operators appear before this, the
match operation is applied to the default variable, $_.

So here the contents of $_ are tested to see whether they
match the pattern:

   ^4\d{15}

Which means:

   ^      = beginning of string
   4      = the digit 4
   \d{15} = a sequence of 15 digits

The results of this match are assigned to the variable $VisaCard.

Since the left-hand side of the assignment is a scalar, the assignment
is made in scalar context. Per the docs, the m// operator in scalar
context will return 1 (true) for a match, or '' (false) for no match.

So, in plain English, $VisaCard is set to 1 if $_ starts with a 4 and
is followed by 15 more digits. Otherwise, $VisaCard is set to ''.

Note that no checking of $_ is done beyond the first 16 positions, so there
can be anything beyond that and $VisaCard will still be 1.

> $BankCard = /^(6565\d{12})|(555[10]00\d{10})/;

This is just a more complex version of the previous statement. $_ is
tested for a pattern, and $BankCard will be set to 1 if it matches the
pattern, or '' if it doesn't.

For the specific syntax of the regular expression, see "perldoc perlre".

Whether these expressions are "right" is another subject. Personally, I
would use a module like Business::CreditCard for this kind of thing...

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to