Perl记录分隔符-

Perl记录分隔符-,perl,parsing,text-processing,Perl,Parsing,Text Processing,我被困在一个看似微不足道的问题上,但不确定我遗漏了什么。我需要帮助 我有一个由标准字段分隔符(0x1f)和记录分隔符(0x1e)字符分隔的文件。() 我不需要解析字段,但对获取记录感兴趣 我阅读了Perl的记录分隔符特殊变量,并尝试使用它来解析文件 文件看起来像这样^表示字段分隔符,^表示记录分隔符(在vim中)。在升华上,这些将显示为相关十六进制代码 ID^_NAME^_PARENTID^_Prov ID^_Pat_ID^_Another ID^_Program1^_Program2^_Sta

我被困在一个看似微不足道的问题上,但不确定我遗漏了什么。我需要帮助

我有一个由标准字段分隔符(
0x1f
)和记录分隔符(
0x1e
)字符分隔的文件。()

我不需要解析字段,但对获取记录感兴趣

我阅读了Perl的记录分隔符特殊变量,并尝试使用它来解析文件

文件看起来像这样<代码>^表示字段分隔符,
^
表示记录分隔符(在vim中)。在升华上,这些将显示为相关十六进制代码

ID^_NAME^_PARENTID^_Prov ID^_Pat_ID^_Another ID^_Program1^_Program2^_Status^_Date^_Reason^_Added^_Sn Length^_ze Reason^_StAge^_EnAge^_Notes^^NUMBER^_VARCHAR^_NUMBER^_    NUMBER^_NUMBER^_NUMBER^_VARCHAR^_VARCHAR^_VARCHAR^_DATE^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^_VARCHAR^^12^_40^_12^_^_12^_12^_200^_200^_12^_^_200^_1^_    4000^_4000^_2000^_2000^_4000^^0^_^_0^_^_0^_0^_^_^_^_^_^_^_^_^_^_^_^^
下面是我为解析记录而编写的代码。问题是,无论我做什么,整个文件都被读入$row标量

我最初假设perl希望
$/
设置为字符串类型。这样做似乎也不管用,我被卡住了

谢谢你的帮助。谢谢

#local $/ = sprintf("%s",chr("0xa"));
local $/ = chr(0xa);

open my $fh, "<", $file or die "$file: $!";

print("reading records\n");

while (my $row = <$fh>) {
    print("Record:", $row, "\n");
}
#local$/=sprintf(“%s”,chr(“0xa”);
本地$/=chr(0xa);
打开我的$fh,“您可以使用
chr(0xNN)
,但是将十六进制字符写成
“\xNN”
更简单。包含记录分隔符的字符串是
“\x1e”

!/usr/bin/env perl
严格使用;
使用警告;
使用v5.10;
我的$file=shift;
打开我的$fh,“您可以使用
chr(0xNN)
,但将十六进制字符写成
“\xNN”
更简单。包含记录分隔符的字符串是
“\x1e”

#/usr/bin/env perl
严格使用;
使用警告;
使用v5.10;
我的$file=shift;

打开我的$fh,”您在问题中说记录分隔符是
0x1e
,但您的代码使用的是
0xa
(换行符)。是哪一个?@Schwern对此表示抱歉。我正在调整代码,以查看使用换行符设置
$/
时的行为。无意中发布了WIP代码。感谢您的发现。您在问题中说记录分隔符是
0x1e
,但您的代码使用的是
0xa
(换行符)。是哪一个?@Schwern对此表示抱歉。我正在调整代码,以查看使用新行设置
$/
时的行为。无意中发布了WIP代码。感谢您的发现。
#!/usr/bin/env perl

use strict;
use warnings;
use v5.10;

my $file = shift;
open my $fh, "<", $file or die "$file: $!";

say "reading records";

local $/ = "\x1e";
while (my $row = <$fh>) {
    say("Record:", join ",", split /\x1f/, $row);
}