检测Perl String是否可打印

时间:2012-02-16 18:44:05

标签: perl

我正在尝试在Perl中打印递归数据结构以进行调试。散列哈希阵列的哈希,那种事......

它的一些基本数据元素是可打印的字符串,所以我正在打印它们。不幸的是,一些基本数据元素是二进制的(想想来自图像文件的内容)。他们用乱码打乱了我的调试输出。

我如何检测哪个是哪个,所以我可以避免打印二进制文件,就像它是一个字符串一样?

(我知道Data :: Dumper。我的问题不是关于我是否应该复制该功能,而是关于如何区分文本和二进制字符串。)

2 个答案:

答案 0 :(得分:7)

perlrecharclass定义了这些字符类:

  

任何可打印字符,不包括空格。任何图形的字符,即可见的字符。该类由所有字母数字字符和所有标点符号组成。

     

任何可打印字符,包括空格。所有可打印字符,即所有图形字符的集合加上那些不是控件的空白字符。

所以你可以匹配一个没有Unicode属性的字符(注意大写P),例如:

/\P{XPosixPrint}/

我怀疑你真正想要的是检测控制字符,这会搞砸终端(注意小写p):

/\p{XPosixCntrl}/

答案 1 :(得分:3)

这样的事情会让你开始

$string_is_unprintable = $string =~ /[^\t\n\x20-x7e]/

根据您的区域设置和终端设置,您还可以容忍序号值大于127(0x7f)的字符。