Perl 有人能给我解释一下这个循环吗?
我有以下Perl代码。我知道最终的结果是什么:如果我运行它并传入一个x9.37文件,它将吐出每个文本字段。这很好,但我正在尝试将其移植到另一种语言,而我根本看不懂Perl。如果有人能将其转换成某种形式的伪代码(我不需要Java——我可以编写这部分),我只需要有人解释下面的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
#!/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”
。