perl – 使用’say’输出的奇怪输出

我需要第二双眼睛.每当其中一个条件(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和追加换行也会发生同样的事情.

解决方法

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

修复:添加chomp;在分割线之前.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...