Perl中的数字到字符串转换

人气:52 发布:2023-01-03 标签: string perl data-conversion numeric

问题描述

据我所知,像

这样的字符串
$a="120.43sunil"+5;    

它将给出类似

的结果
$a=125.43     

因为字符串不是数字,所以将省略"Sunil"部分。 如果我们得到一些类似

的东西
$a="12fred34"*" 3"   

该字符串是否会转换为1234或12034? 我是Perl编程的新手。

推荐答案

如果您打开strictwarnings-您确实应该这样做-它将警告您。

这很好,因为这不是一个好主意。

如果您尝试您的代码,您将看到您的第二个示例给出:

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

19