Perl奇数行为,在脚本声明的变量和<;STDIN>;取变量差
我有这个脚本,工作正常:Perl奇数行为,在脚本声明的变量和<;STDIN>;取变量差,perl,Perl,我有这个脚本,工作正常: #!/usr/bin/perl $key = pack("H*","3cb37efae7f4f376ebbd76cd"); $str = "&4\=80CHB'"; $dec = decode($str); print "Decoded string value: $dec\n"; sub decode{ #Sub to decode @subvar=@_; my $sqlstr = $subvar[0]; $cipher = un
#!/usr/bin/perl
$key = pack("H*","3cb37efae7f4f376ebbd76cd");
$str = "&4\=80CHB'";
$dec = decode($str);
print "Decoded string value: $dec\n";
sub decode{ #Sub to decode
@subvar=@_;
my $sqlstr = $subvar[0];
$cipher = unpack("u", $sqlstr);
$plain = $cipher^$key;
return substr($plain, 0, length($cipher));
}
如果我将其更改为从STDIN获取$str变量,则会将所有结果弄乱:
#!/usr/bin/perl
$key = pack("H*","3cb37efae7f4f376ebbd76cd");
print "Enter string to decode: ";
$str=<STDIN>;chomp $str;
$dec = decode($str);
print "Decoded string value: $dec\n";
sub decode{ #Sub to decode
@subvar=@_;
my $sqlstr = $subvar[0];
$cipher = unpack("u", $sqlstr);
$plain = $cipher^$key;
return substr($plain, 0, length($cipher));
}
#/usr/bin/perl
$key=pack(“H*”,“3cb37efae7f4f376ebbd76cd”);
打印“输入要解码的字符串:”;
$str=;chomp$str;
$dec=解码($str);
打印“解码字符串值:$dec\n”;
子解码{#子解码
@subvar=@;
my$sqlstr=$subvar[0];
$cipher=unpack(“u”,$sqlstr);
$plain=$cipher^$key;
返回substr($plain,0,length($cipher));
}
第一个脚本将其设置为ok,结果是:
解码字符串值:mentos
第二个脚本不好:
解码字符串值:ot&¸ÝÖóvë½vÍ
知道我做错了什么吗?谢谢 您的原始代码
$str = "&4\=80CHB'";
由于某种原因,它包含一个转义的等号。这和
$str = "&4=80CHB'";
因此,您需要在修改后的代码中输入
&4=80CHB'
。我的sting需要有“\”和其他特殊字符,如何转义它们以保持它们在从STDIN发送时不变?带有\Q…\E???@xtmtrx的内容,您的字符串不包含“\”。字符串literal“&4\=80CHB'
生成字符串&4=80CHB'
。如果需要字符串&4\=80CHB'
,则需要使用文字“&4\\=80CHB'
。可以使用单引号(或q
运算符),如'ABC\123'
,表示字符ABC\123。上面的字符串可以编码为q(&4\=80CHB')
。您可以使用任何可打印字符作为q
的分隔符,但如果最后一个字符是反斜杠,则必须始终将其加倍,如q | ABC\123\\\\
for ABC\123\。