字符串轉換據我瞭解當過像數字在Perl
$a="120.43sunil"+5;
一個字符串,它會給像
$a=125.43
一個結果,因爲字符串不是一個數字的「蘇尼爾」部分會被省略。 如果我們得到這樣
$a="12fred34"*" 3"
一些事情將字符串轉換爲1234或12034? 這是一個新的perl編程。
字符串轉換據我瞭解當過像數字在Perl
$a="120.43sunil"+5;
一個字符串,它會給像
$a=125.43
一個結果,因爲字符串不是一個數字的「蘇尼爾」部分會被省略。 如果我們得到這樣
$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,"\n";
print $val + 0; #force numeric context;
雖然我們在此 - 不要使用$a
或$b
- 它們是在perl
-sort
ing中具有特定用途的變量。無論如何,你不應該使用單字母變量,這是一種糟糕的編碼習慣。
*我不會真的建議與dualvars
亂搞 - 他們真的很酷,但可以讓使用是否嚴重一些非常可怕的代碼,這會可能發生什麼,如果你是「一種新的perl編程「
Perl中的字符串到數字轉換的工作方式非常類似於C函數strtod
。也就是說,Perl期望可選的前導空格,可選符號(+
或-
),某些數字(可選包含.
)和可選指數(e
或E
,可選符號(+
或-
),更多數字)。
作爲特殊情況,字NaN
和Inf
(不區分大小寫)也被識別爲數字。
如果字符串中包含更多字符,它們將被忽略但會觸發警告(如果警告已啓用)。有一個例外:字符串"0 but true"
轉換爲0
而不發出警告。
如果字符串未以有效數字開頭,則返回0
(並且還會發出警告)。
你試過了嗎? – Jens
似乎很奇怪,你會問這是一個問題,而不是僅僅嘗試一下。 –