Perl追加前缀循环数组

时间:2011-11-04 15:56:04

标签: arrays perl append

我正在努力在循环数组时附加文件扩展名。例如,预期输出为ABC001.csv,但输出看起来更像.csv01。

非常感谢任何有关如何做到这一点的帮助。如有必要,我可以提供更多代码。

foreach my $name (@source){
print "${name}.csv\n";
} 

2 个答案:

答案 0 :(得分:6)

我确定您在文件名末尾有回车符。也就是说,$name被设置为" ABC001 \ r"。当您打印" $ name.csv \ n"时,您将获得:

ABC001<-
.csv

在屏幕上看起来像.csv01

快速解决方法是删除回车符:

for my $name (@source) {
  $name =~ s/\r//g;
  print "$name.csv\n";
}

但更好的解决方案是在数据进入应用程序时删除回车。

答案 1 :(得分:1)

user5402的回答是正确的。我只是想分享一些perl功能:

s/\s*$/.csv/, say for @source;

或分手,以避免可能的冲突:

s/\s*$/.csv/ for @source;
say for @source;

say已启用use v5.10use feature qw(say),只是print,后面附加了换行符。

替换将用“.csv”替换字符串末尾的任何空格 - 包括回车符。如果没有空格,它只会添加“.csv”,因为量词*允许零匹配,而锚$匹配字符串的结尾。

有一点神奇之处在于$_在下标循环中别名为@source的所有元素,因此会被替换永久更改。