String Perl中的数字到字符串转换
据我所知,当一根弦像String Perl中的数字到字符串转换,string,perl,numeric,data-conversion,String,Perl,Numeric,Data Conversion,据我所知,当一根弦像 $a="120.43sunil"+5; 它将产生如下结果: $a=125.43 由于字符串不是数字,“sunil”部分将被省略。 如果我们得到像这样的东西呢 $a="12fred34"*" 3" 字符串将转换为1234或12034吗? 我是perl编程的新手 如果您打开strict和warnings——就像您真正应该打开的那样——它将警告您 这是个好主意,因为这是个坏主意 如果您尝试您的代码,您将看到第二个示例给出: my $val="12fr
$a="120.43sunil"+5;
它将产生如下结果:
$a=125.43
由于字符串不是数字,“sunil”部分将被省略。
如果我们得到像这样的东西呢
$a="12fred34"*" 3"
字符串将转换为1234或12034吗?
我是perl编程的新手 如果您打开
strict
和warnings
——就像您真正应该打开的那样——它将警告您
这是个好主意,因为这是个坏主意
如果您尝试您的代码,您将看到第二个示例给出:
my $val="12fred34"*" 3" ;
print $val;
给出:
参数“12fred34”在乘法(*)中不是数字
36
perl
正在“查找”12个,并使用它,丢弃其余的
顺便说一下,您的第一个示例-还警告:
参数“120.43sunil”不是数字加法(+)
但事实上,这只是一个坏主意
perl
可以隐式地将字符串转换为数字,但如果不能,则会发出警告。那是因为在你的第二个例子中,它是模棱两可的。文本应该是零吗?忽略?这是一个偶数,还是两个
如果确实需要将字符串的一部分转换为数字,那么应该首先解析字符串,然后提取所需的值。这可以简单到
$val =~ s/\D//g;
但可能是:
@vals = $str =~ m/(\d+)/g;
如果你真的想用数字和字符串做一些有意义的事情,看看*:
当我们使用时,不要使用$a
或$b
,它们是在perl
-排序中有特定用途的变量。无论如何,您不应该真正使用单字母变量,这是一个不好的编码习惯
*实际上,我并不建议你去摆弄双变量,它们确实很酷,但如果使用不当,可能会产生一些非常糟糕的代码,如果你是“perl编程新手”如果你像你应该做的那样打开严格的和警告,它会警告你
这是个好主意,因为这是个坏主意
如果您尝试您的代码,您将看到第二个示例给出:
my $val="12fred34"*" 3" ;
print $val;
给出:
参数“12fred34”在乘法(*)中不是数字
36
perl
正在“查找”12个,并使用它,丢弃其余的
顺便说一下,您的第一个示例-还警告:
参数“120.43sunil”不是数字加法(+)
但事实上,这只是一个坏主意
perl
可以隐式地将字符串转换为数字,但如果不能,则会发出警告。那是因为在你的第二个例子中,它是模棱两可的。文本应该是零吗?忽略?这是一个偶数,还是两个
如果确实需要将字符串的一部分转换为数字,那么应该首先解析字符串,然后提取所需的值。这可以简单到
$val =~ s/\D//g;
但可能是:
@vals = $str =~ m/(\d+)/g;
如果你真的想用数字和字符串做一些有意义的事情,看看*:
当我们使用时,不要使用$a
或$b
,它们是在perl
-排序中有特定用途的变量。无论如何,您不应该真正使用单字母变量,这是一个不好的编码习惯
*实际上,我不建议你乱搞dualvars
——它们确实很酷,但如果使用不当,可能会产生一些非常糟糕的代码,如果你是“perl编程新手”perl中的字符串到数字的转换非常像C函数strtod
。也就是说,Perl需要可选的前导空格、可选符号(+
或-
)、一些数字(可选包含
)和可选指数(e
或e
),可选符号(+
或-
),以及更多的数字
作为特殊情况,单词NaN
和Inf
(不区分大小写)也被识别为数字
如果在此之后字符串包含更多字符,则会忽略这些字符,但会触发警告(如果启用了警告)。有一个例外:字符串“0 but true”
在没有警告的情况下转换为0
如果字符串不是以有效数字开头,它将返回0
(并发出警告)。Perl中字符串到数字的转换与C函数strtod
非常相似。也就是说,Perl需要可选的前导空格、可选符号(+
或-
)、一些数字(可选包含
)和可选指数(e
或e
),可选符号(+
或-
),以及更多的数字
作为特殊情况,单词NaN
和Inf
(不区分大小写)也被识别为数字
如果在此之后字符串包含更多字符,则会忽略这些字符,但会触发警告(如果启用了警告)。有一个例外:字符串“0 but true”
在没有警告的情况下转换为0
如果字符串不是以有效的数字开头,它将返回0
(并发出警告)。我认为这是对它的总结!可耻的是,你让dualvars从笼子里出来了如果有人想用新的方式射中自己的脚,那么我该和谁争论呢?我想这就是总结!如果有人想用新的方式射中自己的脚,你会让dualvars走出笼子,那么我该和谁争论呢?奇怪的是,你会把这个问题作为一个问题而不是仅仅试着去问。奇怪的是,你会把这个问题作为一个问题而不是仅仅试着去问。'0但是true'
也是一个特例,但是true是我可能会尝试突破上下文::Return的地方,它让你知道区别介于布尔上下文和标量上下文之间。@Sobrique context::Return是一个糟糕的想法,与所有Damian模块一样,除了在玩具程序IMHO中,不应使用它。可能是,但它是处理0但为真的情况的一种方法。'0但t