一定看起来很蠢,但我有一些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
第一个和第二个字符。我哪里错了?
答案 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";
}