我正在循环访问数组时附加文件扩展名。例如,期望的输出是ABC001.csv,但输出看起来更像.csv01。Perl附加前缀循环数组
任何帮助如何做到这一点非常感谢。如有必要,我可以提供更多代码。
foreach my $name (@source){
print "${name}.csv\n";
}
我正在循环访问数组时附加文件扩展名。例如,期望的输出是ABC001.csv,但输出看起来更像.csv01。Perl附加前缀循环数组
任何帮助如何做到这一点非常感谢。如有必要,我可以提供更多代码。
foreach my $name (@source){
print "${name}.csv\n";
}
我确定您在文件名末尾有回车符。即,$name
正在设置为“ABC001 \ r”。当您打印 “$ name.csv \ n”,你得到:
ABC001<-
.csv
它看起来像.csv01
在屏幕上。
速战速决将去除回车这样的:
for my $name (@source) {
$name =~ s/\r//g;
print "$name.csv\n";
}
但更好的解决办法是删除在点回车在数据进入你的应用程序。
建议一种解决问题的方法会很有用。 –
谢谢!有用! @ user5402 –
+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
的所有元素的下标循环中是别名,因此被替换永久更改。
这应该工作。你确定'@ source'包含你认为它的作用吗?你有没有严格使用?使用警告;'? – Mat
我的猜测是你的文件名后面有回车符。 – ErikR
你可以发布输入'@ source',它至少是它的一部分吗? –