在这里,我想将每行中的数据打印为3个单独的值,并使用" :"作为分隔符.该文件BatmanFile.txt包含以下详细信息:
Bruce:Batman:bat@bat.com
Santosh:Bhaskar:santosh@santosh.com
Run Code Online (Sandbox Code Playgroud)
我预期的输出是:
Bruce
Batman
bat@bat.com
Santosh
Bhaskar
santosh@santosh.com
Run Code Online (Sandbox Code Playgroud)
执行脚本后的输出是:
Bruce
Batman
bat@bat.com
Bruce
Batman
bat@bat.com
Run Code Online (Sandbox Code Playgroud)
请解释一下我在这里缺少的东西:
use strict;
use warnings;
my $file = 'BatmanFile.txt';
open my $info, $file or die "Could not open $file: $!";
my @resultarray;
while( my $line = <$info>) {
#print $line;
chomp $line;
my @linearray = split(":", $line);
push(@resultarray, @linearray);
print join("\n",$resultarray[0]),"\n";
print join("\n",$resultarray[1]),"\n";
print join("\n",$resultarray[2]),"\n";
}
close $info;
Run Code Online (Sandbox Code Playgroud)
您逐行循环遍历文件.您已将所有行(分割后)存储在数组中.循环结束后,您将所有数据都放在resultarray数组中,只需在循环后打印整个数组(而不是仅打印您当前正在执行的前3个索引).
#!/usr/bin/perl
use strict;
use warnings;
my @resultarray;
while( my $line = <DATA>){
chomp $line;
my @linearray = split(":", $line);
push @resultarray, @linearray;
}
print "$_\n" foreach @resultarray;
__DATA__
Bruce:Batman:bat@bat.com
Santosh:Bhaskar:santosh@santosh.com
Run Code Online (Sandbox Code Playgroud)
您可以避免所有变量并执行以下操作
while(<DATA>){
chomp;
print "$_\n" foreach split(":");
}
Run Code Online (Sandbox Code Playgroud)
一个班轮:
perl -e 'while(<>){chomp; push @result, split(":",$_);} print "$_\n" foreach @result' testdata.txt
Run Code Online (Sandbox Code Playgroud)