如何確保將變量值作爲整數傳遞?我有一個正在傳遞給JSON調用的變量,如果通過getopts設置值,然後在事件中將值傳遞給JSON,則失敗。無論該值是在命令行中輸入還是通過設置默認值,都會失敗。確保變量作爲整數傳遞
例如:
my $code = $opt_s||'4';
但是,如果我硬編碼設置值,像這樣:
$code = '4';
這工作。
API期望提供一個int。我假設我的變量在第一種情況下被轉換爲字符串,但是,我無法弄清楚如何阻止這種行爲。
由於 蜂
如何確保將變量值作爲整數傳遞?我有一個正在傳遞給JSON調用的變量,如果通過getopts設置值,然後在事件中將值傳遞給JSON,則失敗。無論該值是在命令行中輸入還是通過設置默認值,都會失敗。確保變量作爲整數傳遞
例如:
my $code = $opt_s||'4';
但是,如果我硬編碼設置值,像這樣:
$code = '4';
這工作。
API期望提供一個int。我假設我的變量在第一種情況下被轉換爲字符串,但是,我無法弄清楚如何阻止這種行爲。
由於 蜂
我認爲一個有錯誤的API,因爲Perl認爲符號整數(IV)4,無符號整數(UV)4,浮點數(NV)4,8比特串(PV ,UTF8 = 0)四位和72位串(PV,UTF8 = 1)四位爲相同的值。 (這甚至不包括超載的對象和魔法變量!)
您可以使用一個操作獲取值的表示形式(IV,UV或NV)之一,該操作需要一個數字並返回一個數字:
0+$code
如果你想要一個具體的IV,你可能需要訪問perlapi。
要得到一個數的整數部分使用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
這不是問題。問題在於,取決於Perl SV的內部狀態,JSON序列化器可能會創建'{「something」:4}'或'{「something」:「4」}',而其他解串器的差別可能很重要。 –
'$ code ='4''不設置字符串不是整數。 「||」不起作用的原因是因爲'$ opt_s'必須具有某種類型的值。 –
你真的在使用'getopts.pl'嗎?考慮切換到'Getopt :: Long'。 –