2013-07-03 52 views
1

如何確保將變量值作爲整數傳遞?我有一個正在傳遞給JSON調用的變量,如果通過getopts設置值,然後在事件中將值傳遞給JSON,則失敗。無論該值是在命令行中輸入還是通過設置默認值,都會失敗。確保變量作爲整數傳遞

例如:

my $code = $opt_s||'4'; 

但是,如果我硬編碼設置值,像這樣:

$code = '4'; 

這工作。

API期望提供一個int。我假設我的變量在第一種情況下被轉換爲字符串,但是,我無法弄清楚如何阻止這種行爲。

由於 蜂

+0

'$ code ='4''不設置字符串不是整數。 「||」不起作用的原因是因爲'$ opt_s'必須具有某種類型的值。 –

+0

你真的在使用'getopts.pl'嗎?考慮切換到'Getopt :: Long'。 –

回答

2

我認爲一個有錯誤的API,因爲Perl認爲符號整數(IV)4,無符號整數(UV)4,浮點數(NV)4,8比特串(PV ,UTF8 = 0)四位和72位串(PV,UTF8 = 1)四位爲相同的值。 (這甚至不包括超載的對象和魔法變量!)

您可以使用一個操作獲取值的表示形式(IV,UV或NV)之一,該操作需要一個數字並返回一個數字:

0+$code 

如果你想要一個具體的IV,你可能需要訪問perlapi。

+0

'int(0 + $ code)'似乎總是爲我生成一個IV(除非$ code'大於〜1E18)。 – mob

+0

@mob,你是說'0 + $ code'不是(對於整數),還是隻是指出'0 + $ code'可以爲'0.5'返回一個'0.5' – ikegami

+0

第二個。 – mob

0

要得到一個數的整數部分使用int()http://perldoc.perl.org/functions/int.html

另見:

還包括Perl有round()函數? ceil()和floor()怎麼樣? http://perldoc.perl.org/perlfaq4.html#Does-Perl-have-a-round%28%29-function%3F-What-about-ceil%28%29-and-floor%28%29%3F-Trig-functions%3F

+0

這不是問題。問題在於,取決於Perl SV的內部狀態,JSON序列化器可能會創建'{「something」:4}'或'{「something」:「4」}',而其他解串器的差別可能很重要。 –