#!/usr/bin/perl
sub csvLine {
my ($csvSep,$csvQuo)=map {substr($_,0,1)} (shift,shift);
return join($csvSep,map {
length($_)==0 || /^[0-9]+(?:\.[0-9]+)?$/
?
$_
:
do {
(my $t=$_)=~s/$csvQuo/${csvQuo}${csvQuo}/og;
$csvQuo.$t.$csvQuo
}
} @_
);
}
print csvLine(',','"',('', 'a " b',12,14.75,'c')),"\n";
Недостатки с моей т.з.:
- Использование «лишней» переменной $t ($t нужна из-за того, что $_ нельзя менять)
- Использование do {}