【发布时间】:2018-03-05 08:02:05
【问题描述】:
我正在使用 Perl 函数转储一个 CSV 文件,我在其中传递某些值,并且独立于这个函数,我想对这些传递的变量执行相同的操作,除了第一个变量,即文件句柄。
我要做的是检查传递的参数 (string) 中是否有逗号,如果有,请将它们括在引号 (") 中。
但是我需要将这些值分配给变量名,因为我以后必须将它们用于不同的目的。
以下是我的子程序:
sub printCSVRowData
{
my $CSVFileHandle = shift;
foreach my $str (@_) {
if ($str eq "" or not defined $str or $str =~ /^ *$/) {
$str = "NA";
}
$str =~ s/\"//g;
}
my $firstCol = shift;
my $secondCol = shift;
my $thirdCol = shift;
# Do some modifications
print $CSVFileHandle "$firstCol, $secondCol, $thirdCol";
}
现在的问题是当我重视这个子例程时,我收到以下错误消息:
尝试在行(调用
$str =~ s/\"//g;)处修改只读值。
谁能帮我解决这个问题?我在这里做错了什么?有没有其他方法可以解决这个问题?
【问题讨论】:
-
在您的
foreach()块内,您是否应该使用$elem而不是$str?
标签: perl loops foreach arguments subroutine