Thank you very much for your help. This is my last coding after some modification based on your advise. Please guide me if I am wrong.
#!/usr/bin/perl -w
use Cwd;
use warnings;
use strict;
use Getopt::Long;
use constant FILEHDR => 4;
use constant CDRLEN => 286;
my ($trace, $help, $infile);
my $swap = '';
my $indir = getcwd;
my $outdir = getcwd;
GetOptions (
"h|help" => \$help,
"filename|f=s" => \$infile,
"swap|s" => \$swap,
"input|i=s" => \$indir,
"output|o=s" => \$outdir,
"trace|t" => \$trace
) or usage();
sub usage {
exit;
}
my $outfile = $infile;
my $data;
if ($infile) {
#open (OUTPUT, ">$outdir/$outfile");
open (DATA, "$indir/$infile");
binmode DATA;
until (eof DATA) {
read (DATA, $data, 2);
my $tag = unpack "H2", substr $data,0,1,'';
my $length = unpack "C", substr $data,0,1,'';
$length -= 2;
if ($length == "81") {
$length = unpack "C", substr $data,0,1,'';
$length -= 1;
}
if ($length > 0) {
read (DATA, $data, $length);
my $rec = unpack "H*", substr $data,0,$length,'';
printf ("RECORD TAG : %s\n", $tag);
printf ("RECORD LENGTH : %s\n", $length);
printf ("RECORD : %s\n", $rec);
}
}
close(DATA);
#close(OUTPUT);
}