我有以下Perl代码。我知道最终结果是什么:如果我运行它并传递x9.37文件,它将吐出每个文本字段。很好,但是我试图将其移植到另一种语言,而且我根本看不懂Perl。如果有人可以将其转换为某种形式的伪代码(我不需要使用Java,我可以编写该部分),那么我只需要有人解释下面的Perl中发生了什么!
#!/usr/bin/perl -w
use strict;
use Encode;
my $tiff_flag = 0;
my $count = 0;
open(FILE,'<',$ARGV[0]) or die 'Error opening input file';
binmode(FILE) or die 'Error setting binary mode on input file';
while (read (FILE,$_,4)) {
my $rec_len = unpack("N",$_);
die "Bad record length: $rec_len" unless ($rec_len > 0);
read (FILE,$_,$rec_len);
if (substr($_,0,2) eq "\xF5\xF2") {
$_ = substr($_,0,117);
}
print decode ('cp1047', $_) . "\n";
}
close FILE;
答案 0 :(得分:7)
read (FILE,$_,4)
:从FILE输入流中读取4个字节并将其加载到变量$_
$rec_len = unpack("N",$_)
:将变量$_
的前4个字节按big-endian顺序解释为无符号32位整数,并分配给变量$rec_len
read (FILE,$_,$rec_len)
:将FILE流中的$rec_len
个字节读入变量$_
substr($_,0,2)
:变量$_
的前两个字符
"\xF5\xF2"
:一个由两个字节组成的字符串,由字节245和242组成
$_ = substr($_,0,117)
:将$_
设置为$_
的前117个字符
use Encode;print decode ('cp1047', $_)
:使用“代码页1047”(即EBCDIC)解释$_
的内容,并输出到标准输出
答案 1 :(得分:4)