John W. Krahn wrote:
> Mumia W. wrote:
>> That happens because the match variables ($1, $2, ...) are only changed
>> when a regular expression matches; otherwise, they are left alone.
>>
>> In the first case, "$2 !~ /domain\.com/" succeeds but does not capture
>> anything, so the numbered match variables are unset.
>>
>> Your situation reinforces the rule that you should always test if the
>> match succeeded before you attempt to use the match variables:
>>
>> my $email = '[EMAIL PROTECTED]';
>> my @f = (undef, $email =~ /(.*)\@(.*)/);
>
> Why did you put undef in there? It serves no useful purpose other than making
> the code harder to understand for beginners.
Wow...powerful statement.
To be honest, I got what I needed before I really payed attention to the
above part as per Rob and Tom's replies, but after re-reading, I agree.
In the above, do I assume correctly (without time to test for myself)
that 'undef' in this case undefines any instance of $1? (or $N for that
matter)?
>
> my @f = $email =~ /(.*)\@(.*)/;
>
>
>> (@f > 1) && ($f[2] =~ /domain\.com/ ?
>> print "$f[1]\n" : print "var 2 is bad\n" );
>>
>> The test "@f > 1" is my way of testing if the match succeeded.
>
> The rvalue conditional operator should use the returned value:
Honestly, I hate to say I'm a beginner, but relative to others here I
won't beg otherwise. Without having to spend time reading the ?: method
(which I never use as of yet anyway), here is how I would do it now, so
I would understand it, and so would my staff who are not programmers
whatsoever, and who may have to understand it lest I get hit by a bus. I
include comments as I would if a non programmer would have to read it:
# Get the username portion, and the domain portion that we
# must verify from the input the user types in
my ($username, $domain) = split (/\@/, $email);
{... do verification}
Now that I've started a controversy, can I ask if the following method
is correct and accepted practice if I only care about the username portion?
I use the following example often instead of split()ing, and then
breaking apart an array. Note this is a simple example, it's more handy
for me in circumstances where I may be fed an array with numerous slices:
my $username = (split (/\@/, $email))[0];
Again, I have to say that the speed of the feedback was great today :)
Rob, I appreciate your input, and Tom, I don't know if you helped
Randall write the books, but it's especially exciting to see yourself
and the author of several books I own and have read active on the list.
Steve
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/