Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这种混乱的Perl是如何工作的? #/bin/perl 严格使用; 使用警告; my($japh,$q,$qq,%b)=“只是另一个Perl黑客\n”; $\uux=加入“”( 07625127776, 0122456410, 03441733416, 01420121552, 04373570104, 07143446334);s#9#f##s#f#9#s;; s} 9}b}$q=$\uu0*9= 潜艇{ $japh=“”; 打印$japh; }; 地图{/^((?i)(?#q#); 打印$japh;#()[^ 对于(my$(b)=1;$(b)({}); }量子阱( a b c d e f g h i j k l m n o p q r s t u v w x y z );$qq=[$q,%b];$\=包装q*h\** ,qq$$.$$qq[0];9->();_Perl - Fatal编程技术网

这种混乱的Perl是如何工作的? #/bin/perl 严格使用; 使用警告; my($japh,$q,$qq,%b)=“只是另一个Perl黑客\n”; $\uux=加入“”( 07625127776, 0122456410, 03441733416, 01420121552, 04373570104, 07143446334);s#9#f##s#f#9#s;; s} 9}b}$q=$\uu0*9= 潜艇{ $japh=“”; 打印$japh; }; 地图{/^((?i)(?#q#); 打印$japh;#()[^ 对于(my$(b)=1;$(b)({}); }量子阱( a b c d e f g h i j k l m n o p q r s t u v w x y z );$qq=[$q,%b];$\=包装q*h\** ,qq$$.$$qq[0];9->();

这种混乱的Perl是如何工作的? #/bin/perl 严格使用; 使用警告; my($japh,$q,$qq,%b)=“只是另一个Perl黑客\n”; $\uux=加入“”( 07625127776, 0122456410, 03441733416, 01420121552, 04373570104, 07143446334);s#9#f##s#f#9#s;; s} 9}b}$q=$\uu0*9= 潜艇{ $japh=“”; 打印$japh; }; 地图{/^((?i)(?#q#); 打印$japh;#()[^ 对于(my$(b)=1;$(b)({}); }量子阱( a b c d e f g h i j k l m n o p q r s t u v w x y z );$qq=[$q,%b];$\=包装q*h\** ,qq$$.$$qq[0];9->();,perl,Perl,我认为很多都是额外的/纯粹的混淆。我知道我们将“仅仅是另一个Perl黑客”分配给$japh,然后我们打印它,但在我们这样做之前,我们将它分配给“”,我不知道它是如何工作的。有人能解释一下这里发生了什么吗?谢谢!步骤№ 1要理解混淆的Perl:通过-MO=Deparse运行它 及 在这里,它们相当于[^bfgmoqry]和[\[\]()^.}\s],但由于正则表达式将只与单个字符匹配,[…]*将匹配零个字符 因此,正则表达式相当于 [\](^.^)\[ } ] 在

我认为很多都是额外的/纯粹的混淆。我知道我们将“仅仅是另一个Perl黑客”分配给$japh,然后我们打印它,但在我们这样做之前,我们将它分配给“”,我不知道它是如何工作的。有人能解释一下这里发生了什么吗?谢谢!

步骤№ 1要理解混淆的Perl:通过
-MO=Deparse
运行它

在这里,它们相当于
[^bfgmoqry]
[\[\]()^.}\s]
,但由于正则表达式将只与单个字符匹配,
[…]*
将匹配零个字符

因此,正则表达式相当于

[\](^.^)\[
        }
        ]
在这种特殊情况下(与
“a”.“z”
匹配)

*9=sub{…}
将一个coderef分配给一个glob。因为
9
不是有效的子例程名称,但仍然可以与
->
操作符一起使用,
9->()
调用该coderef。这与
sub-foo{…}
一样,
foo()
“foo-->
是同一回事

字符
a
被编码为十进制
97
为ASCII,因此
ord(“a”)-96
1
,对于
z
,应该是26

$?
是最后一个子错误,应该为零。
$+
是最后一个捕获组的值(因此,
$\ucode>)。
~~%b
对空哈希进行双反运算。空哈希的比例化为
0
,因此双位反运算再次生成零

$/=$+;$q=~s[$qq][$/]g
只是有点模糊;因为
$+
$\ucode>,我们可以直接编写
$q=~s/$qq/$\ug

$qq=[$q,%b];…$$qq[0]
是蹩脚的,一个
$\=pack('h*,$q)
就足够了

9
sub中,将打印空字符串,然后是
$\
,设置为空字符串,直到倒数第二行。删除此级别的间接寻址、任何现在未使用的变量以及简单替换,我们得到:

m/^([^bfgmoqry])$/
s/${qq}0/$\ug
替换只能在零处匹配,我们知道输出将是
pack
的一些十六进制数。匹配的可能位置为:

use warnings;
use strict;
my $q = '1045737470216506f6478656270205562730602861636b65627100';
for ("a" .. "z") {
    m/^([^bfgmoqry])$/ or next;
    my $qq = ord($_) - 96;
    $q =~ s/${qq}0/$_/g;
}
print pack('h*', $q);
其中
b,f,g
由于正则表达式而被禁止。生成的字符串为

1045737470216506f6478656270205562730602861636b65627100
*^      *^   *^          *^*^     *^*^             *^^
 a       g    e           g b      c f              a

它解码到JAPH。

整洁,因此正确地突出显示了
m/
运算符。它在哪里被混淆?
[\](^.^)\[
        }
        ]
m/^([^bfgmoqry])$/
use warnings;
use strict;
my $q = '1045737470216506f6478656270205562730602861636b65627100';
for ("a" .. "z") {
    m/^([^bfgmoqry])$/ or next;
    my $qq = ord($_) - 96;
    $q =~ s/${qq}0/$_/g;
}
print pack('h*', $q);
1045737470216506f6478656270205562730602861636b65627100
*^      *^   *^          *^*^     *^*^             *^^
 a       g    e           g b      c f              a
a45737470216e6f64786562702055627c602861636b65627a0