我打算在文件中使用解包。首先我用一个字符串测试。当我在字符串中有嵌入空间时,下面的脚本将其显示为空。当我用文件空间进行测试时,可以正确读取。不知道为什么当我使用字符串时它会将其更改为 null。我可以在读取固定长度文件时使用 unpack 吗?我是否需要考虑尾随空格或其他任何东西?
#!/usr/local/bin/perl
use strict;
use warnings;
my $str="hek kaaa";
print "<$str>\n";
foreach(unpack("(A1)*", $str)) {
print sprintf("%x", ord), " ";
}
Output:
<hek kaaa>
68 65 6b 0 6b 61 61 61
非常感谢您的回复。在下面粘贴我的查询
当 perl 程序从文本文件中读取并使用“A”格式解压缩时,它工作正常。第一行我在 A 和 D 之间的第一个字段中有一个嵌入空间。标签变量打印为“A D3”。但是当我有一个变量 $str="A D3" 并以下面的方式解压缩时,它在 A 之后有一个空值。从文件和变量读取时它的工作方式有何不同?
foreach(unpack("(A1)*", $str)) {
print sprintf("%x", ord), " ";
}
它显示为 41 0 44 33 的十六进制输出
cat test.txt
A D37845566974923342XYZ24023984
QRW49327408234028434ERD24448009
my $file = 'test.txt';
open(my $data, '<', $file) or die "Could not open '$file'\n";
while (my $line = <$data>) {
print $line;
chomp $line;
my ($label, $source, $dest, $type, $value) = unpack ("A4 A8 A8 A4 A8", $line);
print "LABEL: $label SOURCE: $source DEST: $dest TYPE: $type VALUE: $value\n";
print "length of a string:" . length($line) . "\n";
foreach(unpack("(a1)*", $label)) {
print sprintf("%x", ord), " ";
}
print "\n";
}