字符串转换据我了解当过像数字在Perl
$a="120.43sunil"+5;
一个字符串,它会给像
$a=125.43
一个结果,因为字符串不是一个数字的“苏尼尔”部分会被省略。 如果我们得到这样
$a="12fred34"*" 3"
一些事情将字符串转换为1234或12034? 这是一个新的perl编程。
字符串转换据我了解当过像数字在Perl
$a="120.43sunil"+5;
一个字符串,它会给像
$a=125.43
一个结果,因为字符串不是一个数字的“苏尼尔”部分会被省略。 如果我们得到这样
$a="12fred34"*" 3"
一些事情将字符串转换为1234或12034? 这是一个新的perl编程。
如果你打开strict
和warnings
- 就像你真的应该 - 它会警告你。
这是好的,因为这是一个坏主意。
如果你尝试你的代码,你会看到你的第二个例子给出了:
my $val="12fred34"*" 3" ;
print $val;
给出:
Argument "12fred34" isn't numeric in multiplication (*)
36
perl
被 “发现” 的12个,并使用,丢弃其余。
你的第一个例子的方式 - 也警告说:
Argument "120.43sunil" isn't numeric in addition (+)
不过说真的 - 这仅仅是一个坏主意。
perl
它可以隐式地将字符串转换为数字,但会警告,如果它不能。这是因为在你的第二个例子中,它是不明确的。文本应该为零吗?忽略?这是甚至一个数字,还是两个?
如果您确实需要将字符串的一部分转换为数字,则应首先解析字符串,然后提取所需的值。这可能是因为
$val =~ s/\D//g;
一样简单,但它可能是:
@vals = $str =~ m/(\d+)/g;
如果你真的想这样做与数字和字符串果香的东西,看dualvar
*:
#!/usr/bin/env perl
use strict;
use warnings;
use Scalar::Util qw (dualvar);
my $val = dualvar (120.43, "sunil");
print $val,"\n";
print $val + 0; #force numeric context;
虽然我们在此 - 不要使用$a
或$b
- 它们是在perl
-sort
ing中具有特定用途的变量。无论如何,你不应该使用单字母变量,这是一种糟糕的编码习惯。
*我不会真的建议与dualvars
乱搞 - 他们真的很酷,但可以让使用是否严重一些非常可怕的代码,这会可能发生什么,如果你是“一种新的perl编程“
Perl中的字符串到数字转换的工作方式非常类似于C函数strtod
。也就是说,Perl期望可选的前导空格,可选符号(+
或-
),某些数字(可选包含.
)和可选指数(e
或E
,可选符号(+
或-
),更多数字)。
作为特殊情况,字NaN
和Inf
(不区分大小写)也被识别为数字。
如果字符串中包含更多字符,它们将被忽略但会触发警告(如果警告已启用)。有一个例外:字符串"0 but true"
转换为0
而不发出警告。
如果字符串未以有效数字开头,则返回0
(并且还会发出警告)。
你试过了吗? – Jens
似乎很奇怪,你会问这是一个问题,而不是仅仅尝试一下。 –