将字节数组转换为十进制
Converting byte array to decimal
想知道是否有人可以向我深入解释这个片段
(my $bytearray_val_ascii = $in) =~ s/([a-fA-F0-9]{2})/chr(hex )/eg;
s///
是 left-hand 端变量的正则表达式 substitution operator which the =~
operator binds,因此语句
$var =~ s/pattern/replacement/;
匹配变量 $var
中的 pattern 并用 replacement 字符串替换它,在double-quoted 上下文。可以通过在结束定界符之后的 modifiers 调整操作(也可以嵌入模式中)。†
这会更改变量“in-place”——在此语句 $var
更改之后。保留 $var
并将更改后的字符串存储在另一个变量中的习惯用法是将 $var
分配给另一个变量,然后“然后”更改它(通过括号对操作进行排序),所有这些都在一条语句中完成。而常用的成语是在那个语句中也引入一个新的变量
(my $new_var = $original) =~ s/.../.../;
现在$original
不变,而改变的字符串在$new_var
中(如果模式匹配)。
自从引入了 r
(non-destructive) 修饰符 in 5.14
以来,现在不需要这个习语了
my $new_var = $original =~ s/.../.../r;
$original
不变,返回修改后的字符串,赋值给$new_var
。
正则表达式本身匹配并捕获两个连续的字母数字字符,对它们运行 hex
,然后对 hex
returns 运行 chr
,并使用该结果替换他们。它不断遍历字符串,以对它找到的所有此类对执行此操作。
如果这确实是所有要做的事情,那么使用 pack
就更简单了
my $bytearray_val_ascii = pack( "H*", $in );
†
这里的修饰符是:e
,这使得替换端被评估为代码,以便该代码评估的内容用于替换;和 g
这使得它继续搜索和替换整个字符串(不仅仅是找到的 pattern
的第一次出现)。
想知道是否有人可以向我深入解释这个片段
(my $bytearray_val_ascii = $in) =~ s/([a-fA-F0-9]{2})/chr(hex )/eg;
s///
是 left-hand 端变量的正则表达式 substitution operator which the =~
operator binds,因此语句
$var =~ s/pattern/replacement/;
匹配变量 $var
中的 pattern 并用 replacement 字符串替换它,在double-quoted 上下文。可以通过在结束定界符之后的 modifiers 调整操作(也可以嵌入模式中)。†
这会更改变量“in-place”——在此语句 $var
更改之后。保留 $var
并将更改后的字符串存储在另一个变量中的习惯用法是将 $var
分配给另一个变量,然后“然后”更改它(通过括号对操作进行排序),所有这些都在一条语句中完成。而常用的成语是在那个语句中也引入一个新的变量
(my $new_var = $original) =~ s/.../.../;
现在$original
不变,而改变的字符串在$new_var
中(如果模式匹配)。
自从引入了 r
(non-destructive) 修饰符 in 5.14
my $new_var = $original =~ s/.../.../r;
$original
不变,返回修改后的字符串,赋值给$new_var
。
正则表达式本身匹配并捕获两个连续的字母数字字符,对它们运行 hex
,然后对 hex
returns 运行 chr
,并使用该结果替换他们。它不断遍历字符串,以对它找到的所有此类对执行此操作。
如果这确实是所有要做的事情,那么使用 pack
就更简单了my $bytearray_val_ascii = pack( "H*", $in );
†
这里的修饰符是:e
,这使得替换端被评估为代码,以便该代码评估的内容用于替换;和 g
这使得它继续搜索和替换整个字符串(不仅仅是找到的 pattern
的第一次出现)。