如何将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