如何将string转换为Perl中的数字?
我如何将一个string转换成Perl的数字值?
你根本不需要转换它:
% perl -e 'print "5.45" + 0.1;' 5.55
这是一个简单的解决scheme:
例1
my $var1 = "123abc"; print $var1 + 0;
结果
123
例2
my $var2 = "abc123"; print $var2 + 0;
结果
0
Perl是一种基于上下文的语言。 根据你提供的数据,它不会工作。 相反,它会根据您使用的操作符和使用它们的上下文来计算如何处理数据。 如果你做数字的事情,你会得到数字:
# numeric addition with strings: my $sum = '5.45' + '0.01'; # 5.46
如果你做string的事情,你会得到string:
# string replication with numbers: my $string = ( 45/2 ) x 4; # "22.522.522.522.5"
Perl主要指出要做什么,而且大部分都是正确的。 说同样的事情的另一种方式是,Perl比动词更关心动词。
你想做什么,它不工作?
谷歌带我在这里search相同的问题时,菲尔问(sorting花车),所以我认为这将是值得发布答案,尽pipe线程是旧的。 我是perl的新手,现在还在缠着它,但是brian d foy的说法是:“Perl比动词更注重动词。” 上面真的碰到了头上的钉子。 在应用sorting之前,您不需要将string转换为浮点数。 你需要告诉sorting值的数字,而不是string。 即
my @foo = ('1.2', '3.4', '2.1', '4.6'); my @foo_sort = sort {$a <=> $b} @foo;
请参阅http://perldoc.perl.org/functions/sort.html了解更多关于sorting的细节;
据我所知, int()不是用来指定数据types的“强制转换”函数,它只是简单地用(ab)来定义上下文作为算术运算。 我(AB)过去使用(0 + $ val)来确保$ val被视为一个数字。
$var += 0
可能是你想要的。 不过要注意的是,如果$ var是string不能转换为数字,你会得到错误,$ var 将被重置为0 :
my $var = 'abc123'; print "var = $var\n"; $var += 0; print "var = $var\n";
日志
var = abc123 Argument "abc123" isn't numeric in addition (+) at test.pl line 7. var = 0
Perl真的只有三种types:标量,数组和散列。 即使这个区别是有争议的。 ;)每个variables的处理方式取决于你对它做什么:
% perl -e "print 5.4 . 3.4;" 5.43.4 % perl -e "print '5.4' + '3.4';" 8.8
在比较中,如果一个标量是一个string的数字,那么它是有区别的。 这并不总是可以确定的。 我可以报告一个perl在“科学”符号中检索一个浮点数的情况,在比较中使用下面的几行:
use strict; .... next unless $line =~ /and your result is:\s*(.*)/; my $val = $1; if ($val < 0.001) { print "this is small\n"; }
而这里$val
不被解释为例如从$line
检索到的"2e-77"
数字。 添加0(或好的ole C程序员0.0)帮助。
Perl是弱types和基于上下文的。 许多标量可以视为string和数字,具体取决于您使用的操作符。 $a = 7*6; $b = 7x6; print "$a $b\n";
你得到42 777777
。
然而,有一个微妙的差异。 当你从文本文件中读取数字数据到数据结构中,然后用Data::Dumper
查看它时,你会注意到你的数字是被引用的。 Perl在内部将它们视为string。
阅读: $my_hash{$1} = $2 if /(.+)=(.+)\n/;
。
转储: 'foo' => '42'
如果你想在转储中加引号:
阅读: $my_hash{$1} = $2+0 if /(.+)=(.+)\n/;
。
转储: 'foo' => 42
在$2+0
Perl会注意到您将$ 2作为一个数字处理,因为您使用了数字运算符。
我注意到这一点,而试图比较两个哈希与Data::Dumper
。