大批
my @ar = qw(one two);
print ~@ar,"\n";
#output 18446744073709551613
标量(结果很有趣)
my $ar = "qw(onetwo)";
print ~$ar
#Output Please refer the screen shot.
我的问题是什么~
?
对于数组,它给出了一些数字。
对于标量,它给出了一些其他字符,我们从终端复制了字符并粘贴到 中gedit
,结果是在以相反顺序打印的长空格字符之后。我无法删除最后的字符。如果我试图删除空格,字符将被一个一个删除(从左到右)。我无法理解这里发生了什么。?
一元~
执行按位求反。首先通过丢弃小数部分将数字转换为整数,然后翻转二进制表示中的每一位。因此,在 64 位系统上,您将获得:
$ perl -e 'printf "%x\n", ~0'
ffffffffffffffff
双重否定可用于以简洁但不可读的方式将非负数转换为整数:
$ perl -le 'print ~~1.8'
1
在标量上下文中计算,数组产生元素的数量,因此对于二元素数组,~@a
等效于~2
。
在对字符串进行操作时,字符串的二进制表示中的每一位都被翻转:
$ perl -le 'print unpack("B*", "A"), "\n", unpack("B*", ~"A")'
01000001
10111110
$ perl -le 'print unpack("H*", "onetwo"), "\n", unpack("H*", ~"onetwo")'
6f6e6574776f
90919a8b8890
6f
是十六进制 ASCII 代码o
,90
是取反的十六进制值。由于每个字节的 MSB 被翻转,因此在打印字符串的按位否定时通常会得到垃圾。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句