Perl不會讓數字與數字的字符串表示之間的有效區分。你的腳本也不應該。您可以編寫一些代碼來區分看起來像整數和浮點數的東西,但要知道它是否是字符串,唯一的方法是標量看起來不像整數或浮點數。
這是一個簡單的例程,它將返回int
,rat
或str
作爲它的參數。請注意,100
和'100'
都是int
,但類似'asdf'
將是str
。
use Scalar::Util 'looks_like_number';
sub guess_type {
looks_like_number($_[0]) ? $_[0] =~ /\D/ ? 'rat' : 'int' : 'str'
}
say guess_type 1; # int
say guess_type "1"; # int
say guess_type 1.1; # rat
say guess_type 'asdf'; # str
既然你是在映射Perl的變量工作給C函數,你可以寫這樣的事情:
sub myfunction {
if (looks_like_number($_[0]) {
if ($_[0] =~ /\D/) {C_float($_[0])}
else { C_int($_[0])}
}
else {C_string($_[0])}
}
哪些應該「做正確的事」給出了一個Perl標量的時候。您可能還想添加一個檢查來查看參數是否爲引用,然後以不同的方式處理該案例。
治療'「100」'和'100'相同通常被認爲的Perl的特徵。你需要更好地解釋爲什麼它是一個問題。用戶調用'your_function(100)'時應該發生什麼,以及它與用戶調用'your_function(「100」)'時有什麼不同? – mob 2011-06-15 17:38:20
Ohk ..我想到了沒有進入這個細節。但是由於情況需要:我必須從perl中調用一些C函數。這些函數被重載並存在於我的庫中。所以我需要找出類型並調用EXPLICITLY函數的正確版本。 – letsc 2011-06-15 17:43:52
不理我的[刪除]答案。我誤解了這個問題的意圖,並沒有意識到你所說的「輸入」是功能的物理論證。 – dolphy 2011-06-15 17:49:10