TRo*_*esh 1 string perl numeric data-conversion
根据我的知识,什么时候有一个字符串
$a="120.43sunil"+5;
Run Code Online (Sandbox Code Playgroud)
它会给出一个结果
$a=125.43
Run Code Online (Sandbox Code Playgroud)
由于字符串不是数字,因此将省略"sunil"部分.如果我们得到一些东西怎么办?
$a="12fred34"*" 3"
Run Code Online (Sandbox Code Playgroud)
将字符串转换为1234或12034?我是perl编程的新手.
如果你打开strict和warnings-就像你真的应该-它会警告你.
哪个好,因为这是一个坏主意.
如果您尝试使用代码,您将看到第二个示例:
my $val="12fred34"*" 3" ;
print $val;
Run Code Online (Sandbox Code Playgroud)
得到:
Argument "12fred34" isn't numeric in multiplication (*)
36
Run Code Online (Sandbox Code Playgroud)
perl 是"找到"12,并使用它,丢弃其余的.
顺便提一下你的第一个例子 - 也警告说:
Argument "120.43sunil" isn't numeric in addition (+)
Run Code Online (Sandbox Code Playgroud)
但实际上 - 这只是一个坏主意.
perl隐含地在可能的情况下将字符串转换为数字,但如果不能则会发出警告.那是因为在你的第二个案例中,这是模棱两可的.文本应该为零吗?忽略?这甚至是一个数字,还是两个?
如果您确实需要将字符串的一部分转换为数字,则应首先解析字符串,然后提取所需的值.这可以很简单
$val =~ s/\D//g;
Run Code Online (Sandbox Code Playgroud)
但它可能是:
@vals = $str =~ m/(\d+)/g;
Run Code Online (Sandbox Code Playgroud)
如果你真的想用数字和字符串来做果味,请看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;
Run Code Online (Sandbox Code Playgroud)
而同时我们在这-不使用$a或$b-他们是在一个特定的使用变量perl- sort荷兰国际集团.你不应该真的使用单字母变量,这是一个糟糕的编码习惯.
*我实际上不会建议乱搞dualvars- 它们真的很酷,但是如果使用得很糟糕的话可以制作一些非常糟糕的代码,如果你是"对perl编程的新手" ,这可能就会发生