convert 0 into string

2019-10-01 00:18发布

问题:

i'm working on a script in perl.

This script read a DB and generate config file for other devices.

I have a problem with "0".

From my database, i get a 0 (int) and i want this 0 become a "0" in the config file. When i get any other value (1,2,3, etc), the script generate ("1","2","3", etc). But the 0 become an empty string "".

I know, for perl:
- undef
- 0
- ""
- "0"
are false.

How can i convert a 0 to "0" ? I try qw,qq,sprintf, $x = $x || 0, and many many more solutions.

I juste want to make a explicit conversion instead of an implicite conversion.

Thank you for your help.

回答1:

If you think you have zero, but the program thinks you have an empty string, you are probably dealing with a dualvar. A dualvar is a scalar that contains both a string and a number. Perl usually returns a dualvar when it needs to return false.

For example,

$ perl -we'my $x = 0; my $y = $x + 1; CORE::say "x=$x"'
x=0

$ perl -we'my $x = ""; my $y = $x + 1; CORE::say "x=$x"'
Argument "" isn't numeric in addition (+) at -e line 1.
x=

$ perl -we'my $x = !1; my $y = $x + 1; CORE::say "x=$x"'
x=

As you can see, the value returned by !1 acts as zero when used as a number, and acts as an empty string when used as a string.

To convert this dualvar into a number (leaving other numbers unchanged), you can use the following:

$x ||= 0;


标签: string perl zero