问题描述
据我所知,像
这样的字符串$a="120.43sunil"+5;
它将给出类似
的结果$a=125.43
因为字符串不是数字,所以将省略"Sunil"部分。 如果我们得到一些类似
的东西$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,"
";
print $val + 0; #force numeric context;
同时,不要使用$a
或$b
,它们是在perl
-sort
中有特定用途的变量。无论如何,你都不应该真的使用单字母变量,这是一个不好的编码习惯。
*我实际上并不建议修改dualvars
--它们真的很酷,但如果使用不当,可能会生成一些非常糟糕的代码,如果您是可能会发生的情况,如果您是"Perl编程的新手"