$ perl -MMIME::Base64 -e 'print encode_base64("syn_ack@163.com");'
c3luX2Fjay5jb20=
$ perl -MMIME::Base64 -e 'print decode_base64("c3luX2Fjay5jb20=");'
syn_ack.com
编码结果无法解码为原始字符串,为什么?
$ perl -MMIME::Base64 -e 'print encode_base64("syn_ack@163.com");'
c3luX2Fjay5jb20=
$ perl -MMIME::Base64 -e 'print decode_base64("c3luX2Fjay5jb20=");'
syn_ack.com
编码结果无法解码为原始字符串,为什么?
您必须转义@
为\@
或使用不同的引号。这是因为双引号被扩展,并被@163
视为一个数组@163
(即使这个名称不是有效的标识符)。
这按预期工作:
perl -MMIME::Base64 -e "print encode_base64('syn_ack@163.com');"
c3luX2Fja0AxNjMuY29t
perl -MMIME::Base64 -e 'print encode_base64("syn_ack\@163.com");'
c3luX2Fja0AxNjMuY29t
perl -MMIME::Base64 -e "print decode_base64('c3luX2Fja0AxNjMuY29t');"
syn_ack@163.com
切换引号。Perl 将在使用双引号时插入变量。
$ perl -MMIME::Base64 -e "print encode_base64('syn_ack@163.com');"
c3luX2Fja0AxNjMuY29t
$ perl -MMIME::Base64 -e "print decode_base64('c3luX2Fja0AxNjMuY29t');"
syn_ack@163.com
当您使用 Perl 看到意外结果时,请确保已启用警告。
$ perl -w -MMIME::Base64 -e '打印 encode_base64("syn_ack@163.com");' 可能在 -e 第 1 行的字符串中意外插值 @163。 c3luX2Fjay5jb20=
单引号 ( ''
) 字符串中不会发生插值,因此您可以运行
perl -w -MMIME::Base64 -e 'print encode_base64('syn_ack@163.com');'
或留下双引号 ( ""
) 并转义@
perl -w -MMIME::Base64 -e 'print encode_base64("syn_ack\@163.com");'
要么输出
c3luX2Fja0AxNjMuY29t
解码给出
$ perl -w -MMIME::Base64 -e '打印 decode_base64("c3luX2Fja0AxNjMuY29t");' syn_ack@163.com