如何使用-0选项在Perl中读取固定宽度的记录?

时间:2018-12-05 11:02:39

标签: perl command-line-interface fixed-width

所以我知道您可以编写Perl单行代码,该行使用非默认记录分隔符读取记录,并带有类似的选项

perl -064 -ne '#... delimited by @'

或将整个文件排成一行:

perl -0777 -ne '#... file at once'

我还知道,如果您以编程方式将记录分隔符$\设置为对数字的引用,则可以读取固定宽度的记录。

perl -ne '$/ = \10; #... 10 chars at a time'

但是我找不到使用-0选项读取固定宽度记录的方法。这可能吗?

1 个答案:

答案 0 :(得分:9)

没有命令行开关。

perlrun

  

-0 [八进制/十六进制]

     

将输入记录分隔符($/)指定为八进制或十六进制数字。如果没有数字,则空字符为分隔符。其他开关可能在数字之前或之后。例如,如果您使用的find版本可以打印以空字符结尾的文件名,则可以这样说:

find . -name '*.orig' -print0 | perl -n0e unlink
     

特殊值00将使Perl在段落模式下提取文件。任何值为0400或更高的值都会导致Perl吞噬整个文件,但是按照惯例,值0777是通常用于此目的的值。

     

您还可以使用十六进制表示法指定分隔符: -0x HHH ... ,其中 H 是有效的十六进制数字。与八进制格式不同,此格式可用于指定任何Unicode字符,甚至包括0xFF以外的字符。因此,如果您确实想要记录分隔符0777,请将其指定为 -0x1FF 。 (这意味着您不能将 -x 选项与包含十六进制数字的目录名一起使用,否则Perl会认为您已将十六进制数字指定为 -0 。 )

您当然可以使用以下内容:

perl -ne'BEGIN { $/ = \10 } ...'

perl -e'$/ = \10; while (<>) { ... }'