题目:
我们有一个文件, 里面内容如下方所示, 我们需要根据|或者:或者@这3个作为分隔符来读取文件, 而不是默认的换行。
解题思路:
perl提供修改默认的文件分隔符的方法, 只需要修改$/内置元素, 但是, $/只接收指定的内容, 也就是明确的字符或者字符串, 不接受正则表达式来作为分隔符。 那么我们只能一次性读取所有的文件, 再根据正则表达式来分隔文件。
具体实现如下:
open my $fh, '<', 'test.txt' or die "failed to open file \n"; #绑定文件句柄
my @strs;
{
#由于$/是内置的全局变量, 因此不要直接改变他, 这样会影响所有的地方, 正确的做法是将需要改变的内容放入一个block之内, 然后通过local来只改变该block内部的$/, 防止该变动影响其他程序内容。
local $/ = undef;
@strs = split /[|:@]/, <$fh>;
}
close $fh; # 关闭文件句柄
print "$_\n--------\n" for @strs;
split函数我们之前提过, 他是可以接收正则表达式来作为他的分隔符的, 因此我们使用这个特性来达到我们的目的。