Perl 有人能给我解释一下这个循环吗?

Perl 有人能给我解释一下这个循环吗?,perl,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

我有以下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;
#/usr/bin/perl-w
严格使用;
使用编码;
我的$tiff_标志=0;
我的$count=0;
打开(文件),
read(文件,$\u4)
:从文件输入流中读取4个字节并加载到变量
$\ucode>

$rec\u len=unpack(“N”,$\u)
:将变量
$\u
的前4个字节解释为以大端顺序排列的无符号32位整数,分配给变量
$rec\u len

read(FILE,$\uu,$rec\u len)
:将
$rec\u len
字节从文件流读入变量
$\ucode>

substr($\u0,2)
:变量的前两个字符
$\u0

“\xF5\xF2”
:由字节245和242组成的两个字符串

$\uu=substr($\u0117)
:将
$\uuz>设置为
$\uz>的前117个字符


使用编码;打印解码('cp1047',$)
:用“代码页1047”解释
$
的内容,即输出到标准输出

-w
是旧的启用方式

声明一个词汇范围的变量


使用
Wait时,它一次循环四个字节?我认为这在java中是行不通的!哦!我可能被perl卡住了!@Mickeythresheds更仔细地阅读——一旦读取4b,它就会读取更多,是什么移动了文件指针,所以它在每次迭代中移动超过4b。至于“被perl卡住了”——如果java做不到的话(正如你所说的),你可以从你的美元中得到更多:)或者,正如你现在所知道的,根据需要调整你的Java版本。我怀疑Java不能从一个流中读取4个字节(参见例如
DataInputStream.readFully
)。@mickeythreeds显示
int-read(byte[]b)
io.FileInputStream
读取的最大长度为
b.length
字节。另请参见,它还执行
解包(“N”,…)
步骤。注意,
解码('cp1047',“\xF5\xF2”)
生成到
“52”