0
$ perl -MMIME::Base64 -e 'print encode_base64("syn_ack@163.com");'
c3luX2Fjay5jb20=
$ perl -MMIME::Base64 -e 'print decode_base64("c3luX2Fjay5jb20=");'
syn_ack.com

编码结果无法解码为原始字符串,为什么?

4

3 回答 3

2

您必须转义@\@或使用不同的引号。这是因为双引号被扩展,并被@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
于 2013-03-21T08:35:28.013 回答
1

切换引号。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

http://perlmeme.org/howtos/using_perl/interpolation.html

于 2013-03-21T08:34:58.233 回答
1

当您使用 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
于 2013-03-21T09:57:56.080 回答