2014-01-30 48 views
-1

我不是Perl程序員,但對於我正在查看的包裝方法有一些疑問。我看到下面的代碼:瞭解Perl中的包裝方法

$diag_cmd = pack("CCSV", DIAG_SUBSYS_CMD_F, DIAG_SUBSYS_PWRDB, PWRDB_DIAG_PKT_SCRIPT | $processor_select, length($s_part)) . $s_part; 

在我的理解包方法需要一些數據值並將其打包成一個字節。現在我有一些關於上述代碼的問題:

  1. 「CCSV」代表什麼?
  2. 第三個參數是PWRDB_DIAG_PKT_SCRIPT | $ processor_select其中PWRDB_DIAG_PKT_SCRIPT是2,$ processor_select是0.它會傳遞什麼來打包'2'或'0',爲什麼?我認爲函數調用在$ diag_cmd = pack(「CCSV」,DIAG_SUBSYS_CMD_F,DIAG_SUBSYS_PWRDB,PWRDB_DIAG_PKT_SCRIPT | $ processor_select,length($ s_part))處結束,但還有一些額外的. $s_part。那是什麼?
  3. 最後一個參數是長度。它在包裝方法中起什麼作用?
+2

'的perldoc -f pack'或http://perldoc.perl.org/functions/pack.html – toolic

+0

或http://perldoc.perl.org/functions/pack.html –

+0

,回答我的第一次問題非常正確。但仍然不理解2,3,4 – TeaLeave

回答

2
  1. http://perldoc.perl.org/functions/pack.html;本質上包裝採取格式字符串(在你的情況下爲CCSV),告訴它如何將其參數的其餘部分組裝成一個字符串。

  2. |是按位或運算符;它有兩個數字(或兩個字符串,但這似乎不是你在做什麼)一次一個。所以2 | 9 0b0010 | 0b1001是0b1011爲11。2 | 0也不過2

  3. 正如你可以說$x = "a" . "b";分配ab$x,在這裏你是包分配的結果的級聯和另一個字符串變量

  4. 長度表達式只是其中的一個參數;特別是將由模板中的V編碼的那個。