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