Solved

Perl Strings

Posted on 1998-08-06
14
222 Views
Last Modified: 2010-05-18
I am trying to write an if statement to compare 2 variables.
The problem I am running into is that there are 2 types of comparision tests in PERL, one is numerical (==, !=, <=), the other is string (eq, ne, le). The variables I am trying to compare can be either string or numerical. So the question is, How does PERL determine if the variable is a string or is numeric? And is there a way I can make all variables just string or just numeric?
0
Comment
Question by:rrivers
  • 7
  • 5
  • 2
14 Comments
 
LVL 5

Accepted Solution

by:
b2pi earned 100 total points
Comment Utility
In reverse order (and again, remember that there are at least 15 ways to do anything:)

$^w = 0;
$a += 0;
$^w = 1;

$a is now strictly numeric.

How does PERL determine if the variable is a string or is numeric?
To paraphrase Tom Christenson, it just does.  Don't worry about it.

If your variables are reasonable (relatively fixed format floats, or integers, or strings)
just use a string comparison if you really don't know whether, say, $a and $b are
strings or numbers.  You could also do a pattern match (m/) if you wanted, which,
intelligently done, could remove the difficulty in comparing floats.

By the way, that $^w (that's a ctrl-w, not carat and w) can be used to turn off the warnings about variables not numeric being treated as numeric.  Use carefully.
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
#that's $^W (and I'd prefer to localize it...)
{local $^W=0; $a += 0;}

#how do YOU determine whether you consider your variable to be string or numerical?
#Perl should be following your intentions, you shouldn't have to be second guessing it.
0
 

Author Comment

by:rrivers
Comment Utility
I tried to use just a string comparison, it doesn't work. I have the variable $search. That variable can either be the word cats or the date (such as 1-1-99).
I then have the loop that says
if ($search eq "")
{
Do something...
}

When $search become the date 1-1-99, the comparison doesn't work. However if $search becomes cats the comparison works.

But if I have :

if ($search == "")
{
Do something...
}

When $search become the date 1-1-99, the comparison works. However if $search becomes cats the comparison fails.

So simply just saying the item is a string does not work.
0
 
LVL 5

Expert Comment

by:b2pi
Comment Utility
I actually wonder about your assignment to $search. Try adding

print "\$search is actually \"$search\"\n";

Just before the line

if ($search eq "") {
0
 

Author Comment

by:rrivers
Comment Utility
$search is exactly what I assign to it, in this case "cats" or "1-1-99" no /n or extra characters involved.
0
 
LVL 5

Expert Comment

by:b2pi
Comment Utility
Did you actually put in the debug line?  On my system:

% perl
$search = "1-1-99";
print "\$search is actually \"$search\"\n";
if ($search eq "") {
   print "Huh? it's Blank!\n";
} else {
   print "Nope, it isn't blank\n";
}

^D
$search is actually "1-1-99"
Nope, it isn't blank
%

Does your system have different results?
0
 

Author Comment

by:rrivers
Comment Utility
Yes, I did a debug. $search is blank because it contains the information from a field on a HTML form. So if there is nothing in the field $search is blank. I have tested this and if the text field is not filled in the variable remains empty.
 
0
Threat Intelligence Starter Resources

Integrating threat intelligence can be challenging, and not all companies are ready. These resources can help you build awareness and prepare for defense.

 
LVL 5

Expert Comment

by:b2pi
Comment Utility
OK, now I'm confused.  You're saying that $search is blank, but

if ($search eq "") {
   print "it's blank\n";
} else {
   print "it's not blank\n";
}

By the way, both 'cats' and '1-1-99' are strings.
would print "it's not blank\n"?  


0
 

Author Comment

by:rrivers
Comment Utility
Yes, I did a debug. $search is blank because it contains the information from a field on a HTML form. So if there is nothing in the field $search is blank. I have tested this and if the text field is not filled in the variable remains empty.
 
0
 
LVL 5

Expert Comment

by:b2pi
Comment Utility
OK, now I'm confused.  You're saying that $search is blank, but

if ($search eq "") {
   print "it's blank\n";
} else {
   print "it's not blank\n";
}

By the way, both 'cats' and '1-1-99' are strings.
would print "it's not blank\n"?  


0
 

Author Comment

by:rrivers
Comment Utility
Yes, I did a debug. $search is blank because it contains the information from a field on a HTML form. So if there is nothing in the field $search is blank. I have tested this and if the text field is not filled in the variable remains empty.
 
0
 

Author Comment

by:rrivers
Comment Utility
Yes, I did a debug. $search is blank because it contains the information from a field on a HTML form. So if there is nothing in the field $search is blank. I have tested this and if the text field is not filled in the variable remains empty.
 
0
 

Author Comment

by:rrivers
Comment Utility
Yes, I did a debug. $search is blank because it contains the information from a field on a HTML form. So if there is nothing in the field $search is blank. I have tested this and if the text field is not filled in the variable remains empty.
 
0
 
LVL 84

Expert Comment

by:ozo
Comment Utility
Neither 'cats' nor '1-1-99' are eq ""
$search=="" is equivalent to $search==0
($search='cats') == 0 (which would give you the warning Argument "cats" isn't numeric if you set $^W)
is equivalent to 0==0
($search='1-1-99') == 0 (which would also give a -w warning)
is equivalent to 1==0
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

On Microsoft Windows, if  when you click or type the name of a .pl file, you get an error "is not recognized as an internal or external command, operable program or batch file", then this means you do not have the .pl file extension associated with …
In the distant past (last year) I hacked together a little toy that would allow a couple of Manager types to query, preview, and extract data from a number of MongoDB instances, to their tool of choice: Excel (http://dilbert.com/strips/comic/2007-08…
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now