对所有变量执行相同的操作,但在Perl函数中传递第一个变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对所有变量执行相同的操作,但在Perl函数中传递第一个变量相关的知识,希望对你有一定的参考价值。
我正在使用Perl函数转储CSV文件,我传递了某些值,而且我想对这些传递的变量执行相同的操作,除了第一个变量,即文件句柄。我想要做的是检查传递的参数(string
)中是否有逗号,如果是,请将它们用引号("
)s括起来。
但是我需要将这些值分配给变量名称,因为我以后必须将它们用于不同的目的。
以下是我的子程序:
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;
)。
谁可以帮我这个事 ?我在这做错了什么?还有其他方法吗?
答案
您正在修改@_
,其元素是作为参数传递的标量。因此,修改@_
的元素并不安全。这就是我们复制@_
元素和修改副本的原因。
sub printCSVRowData {
my ($csv, $fh, @fields) = @_;
@fields = map { defined($_) && /\S/ ? $_ : "NA" } @fields;
$csv->say($fh, \@fields);
}
您应该使用Text :: CSV_XS或类似的。
my $csv = Text::CSV_XS->new({
auto_diag => 2,
binary => 1,
});
以上是关于对所有变量执行相同的操作,但在Perl函数中传递第一个变量的主要内容,如果未能解决你的问题,请参考以下文章
Apache 未在包含的 perl 脚本中执行“do”包含函数
想要在 PHP 中传递值列表(如在 Perl 中),而不是引用数组