使用'说'的奇怪输出

时间:2013-12-29 00:04:41

标签: perl

我需要第二双眼睛。每当其中一个条件(if或elsif)为真时,我就会得到一个额外的换行符。我不希望这样。

use strict;
use warnings;
use autodie;
use feature 'say';

my $filename = 'rr.txt';
open my $fh, '<', $filename;

while (<$fh>) {
  my ($last_name, $first_name, $country) = split /[,\|]/, $_;
  my $middle_name;
  $country =~ s/^\(//;
  $country =~ s/\)$//;
  say "Last Name: $last_name";
  say "First Name: $first_name";
  say "Country: $country";

  if ($first_name =~ /\w\s(\w+)/) {
     $middle_name = $1;
     say "Middle Name: $1";
  } elsif ($first_name =~ /\w\-(\w+)/) {
     $middle_name = $1;
     say "Middle Name: $1";
  }

}

该文件如下所示:

Reid, Matt|(AUS)
Samper-Montana, Jordi|(ESP)
Krajonovic, Filip|(SRB)
Jones, Greg Luke|(AUS)
Burquier, Gregoire|(FRA)
Mandol, David|(ARG)
Daniel Llosa, Miguel Horpo|(DOM)

每当输出一个中间名时,就会出现换行符。我不知道那是从哪里来的。 使用print并附加换行符也会发生同样的事情。

1 个答案:

答案 0 :(得分:7)

say在输出结尾添加换行符。您读取的国家/地区代码仍然附加换行符,因为您没有chomp输入行。因此,您获得双倍行距输出(来自国家之后的换行符,而不是中间名之前的换行符。)

修复:在chomp;行之前添加split