为什么我在这个brainfuck程序中出现Perl错误?

时间:2014-12-24 01:06:51

标签: perl interpreter brainfuck

当我运行以下Brainfuck程序(source)...

>+>++>+++>++++>+++++>++++++>+++++++>++++++++>++++++++++++++++++++++++++++++++<<<<<<<<[>>>>>>>>+.<<<<<<<<]

...通过我使用的解释器(一个用Perl编写的小解释器)它不应该做的事情(“你会发现它永远循环并打印出每个字符,从空格开始(32) ,以ASCIIbetical order“),而是打印输出,循环:

Wide character in print at (eval 1) line 1, <> chunk 1.

是的,代码包含冗余。它是从Haskell中自动生成的。

2 个答案:

答案 0 :(得分:3)

在你的环境中设置PERLIO =:utf8告诉perl IO应该在utf8中并且它将停止警告。

答案 1 :(得分:1)

您的解释器可能会使用Perl function(例如“chr”)在输出时将单元格值转换为字符,并且不会将单元格值限制为[0; 255]。

虽然这在某些计算中很有用,但Brainfuck输出通常是字节,而Unicode代码点通常编码为UTF-8,即使不是,255以上的代码也需要多于一个字节,当然。

我确定你首先获取所有这些字符,然后只有当单元格值太大时才会出现警告。也许,如果你让它运行一段时间,单元格值会回绕(可能是32767或2147483647),那么你会有负值,最后会再次出现32,重复这个循环。