有人可以向我解释这个循环吗?

Mic*_*eds -1 perl

我有以下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;
Run Code Online (Sandbox Code Playgroud)

mob*_*mob 7

read (FILE,$_,4) :从FILE输入流中读取4个字节并加载到变量中 $_

$rec_len = unpack("N",$_):将变量的前4个字节解释为$_big-endian顺序的无符号32位整数,赋值给变量$rec_len

read (FILE,$_,$rec_len):$rec_len从FILE流中读取字节到变量$_

substr($_,0,2):变量的前两个字符 $_

"\xF5\xF2":由字节245和242组成的双字符字符串

$_ = substr($_,0,117):设置$_为前117个字符$_

use Encode;print decode ('cp1047', $_):$_用"代码页1047" 解释内容,即EBCDIC并输出到标准输出