我正在努力在循环数组时附加文件扩展名。例如,预期输出为ABC001.csv,但输出看起来更像.csv01。
非常感谢任何有关如何做到这一点的帮助。如有必要,我可以提供更多代码。
foreach my $name (@source){
print "${name}.csv\n";
}
答案 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.10
或use feature qw(say)
,只是print
,后面附加了换行符。
替换将用“.csv”替换字符串末尾的任何空格 - 包括回车符。如果没有空格,它只会添加“.csv”,因为量词*
允许零匹配,而锚$
匹配字符串的结尾。
有一点神奇之处在于$_
在下标循环中别名为@source
的所有元素,因此会被替换永久更改。