convert 0 into string

谁都会走 提交于 2019-12-13 11:29:08

问题


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;


来源:https://stackoverflow.com/questions/43682671/convert-0-into-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!