3

这行代码错误,“解包中的类型't'无效”:

my $x = unpack(chr(ord("a") + 19 + print ""), $string);

它试图检索最初以这种方式转换的 $x 的原始值:

my $string = pack("u",$x);

我在互联网上的任何地方都找不到这个错误。我基本上是在尝试制作一个简单的字符串混淆器,它可以检索原始字符串。

4

3 回答 3

5

函数print在失败时返回 false。在数字上下文中,错误值被视为 0。在您的情况下,pack 的第一个参数变为“t”并且 Perl 引发错误。

请注意,这print可能会失败,通常是在您这样做的情况下close STDOUT。此外,成功时print返回true,不限于1. 2在未来的版本中返回,blah或任何其他真实值的可能性很小。

于 2012-12-15T02:23:12.183 回答
5

你到底为什么要这样做?你为什么要使用 print 来实现它的价值?的逆运算$string = pack("u", $x);很简单$x = unpack("u", $string);

于 2012-12-15T02:41:54.183 回答
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.
于 2012-12-17T13:36:05.667 回答