Perl中的数字到字符串转换

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编程的新手.

Sob*_*que 9

如果你打开strictwarnings-就像你真的应该-它会警告你.

哪个好,因为这是一个坏主意.

如果您尝试使用代码,您将看到第二个示例:

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编程的新手" ,这可能就会发生