Perl读取文件并拆分成变量问题

时间:2014-03-11 14:02:20

标签: perl

一定看起来很蠢,但我有一些Perl代码来读取包含这样内容的文件:

John|Doe
John|Smith
No|Name
Ozzy|Osbourne

我想阅读文件并将数据作为变量$firstname $lastname获取:

#!/usr/bin/perl
use strict;
use warnings;

open(DB, "$ARGV[0]") || die ":: Can't open database.\n";

my $line;

foreach $line (<DB>){
  chomp $line;
  $line =~ s/^\s+//;
  $line =~ s/\s+$//;
  my ($firstname, $lastname) = split /|/, $line;
  print "Firstname: $firstname - Lastname: $lastname\n";
}

我得到的是:

Firstname: J - Lastname: o
Firstname: J - Lastname: o
Firstname: N - Lastname: o
Firstname: O - Lastname: z

第一个和第二个字符。我哪里错了?

2 个答案:

答案 0 :(得分:9)

Split采用正则表达式。如果你想按字面意思匹配|,你需要逃避它。

split /\|/, $line;

答案 1 :(得分:0)

您可以在不使用拆分的情况下执行此操作,使用正则表达式

open(FH,test.txt);
my @array=<FH>;

foreach(@array)
{
$_=~ m/(\w+)\|(\w+)/;
print "Firstname: $1 ,Lastname: $2 \n";
}