这行代码在解包时出现“无效类型't'错误”:
my $x = unpack(chr(ord("a") + 19 + print ""), $string);
它正在尝试检索以这种方式首次转换的$ x的原始值:
my $string = pack("u",$x);
我无法在互联网上的任何地方找到此错误。我基本上试图创建一个简单的字符串混淆器,它可以检索原始字符串。
答案 0 :(得分:5)
函数print
在失败时返回false。在数值上下文中,false值被视为0.在您的情况下,pack的第一个参数变为“t”,Perl会引发错误。
请注意,print
可能会失败,通常是在您执行close STDOUT
的情况下。此外,print
成功时返回 true ,不限于1
。在将来的版本中返回2
,blah
或任何其他真值的可能性很小。
答案 1 :(得分:5)
为什么你会这样做呢?你为什么要使用print作为它的价值? $string = pack("u", $x);
的反向操作只是$x = unpack("u", $string);
答案 2 :(得分:1)
诊断可以解释它:)
$ perl -Mdiagnostics -le " print unpack q{t} , 1"
Invalid type 't' in unpack at -e line 1 (#1)
(F) The given character is not a valid pack or unpack type.
See "pack" in perlfunc.
(W) The given character is not a valid pack or unpack type but used to be
silently ignored.
Uncaught exception from user code:
Invalid type 't' in unpack at -e line 1.
at -e line 1.