所以我在用PERL编程时遇到了问题。我使用foreach循环从哈希中获取一些数据,因此它必须遍历它。
守则:
foreach $title (keys %FilterSPRINTHASH) {
$openSP = $FilterSPRINTHASH{$title}{openSP};
$estSP = $FilterSPRINTHASH{$title}{estSP};
$line = "'$title':{'openSP' : $openSP, 'estSP' : $estSP}\n";
print $outfile "$line\n";
}
问题是,我正在使用PERL写入文件表达式来创建一个单独的文件,该文件表达式将是一个JSONP文本(后来用于HTML)。
回到问题:
由于JSONP需要逗号","在不是最后一行的每一行之后,我必须在行尾添加一个逗号,然而当最后一行进来时,我必须删除逗号。
我已尝试使用CHOP功能,但不知道在哪里放置它,因为如果我把它放在foreach的末尾,它只会在$ line中删除逗号,但这不会在我创建的新文件中将其删除
我也尝试使用while(<>)语句,但没有成功。
任何有关的想法。
BR
答案 0 :(得分:1)
使用JSON
模块远不易出错;无需重新发明轮子
use JSON;
print $outfile encode_json(\%FilterSPRINTHASH), "\n";
答案 1 :(得分:0)
您可以检查它是否是循环的最后一次迭代,然后从行中删除逗号。
类似
my $count = keys %FilterSPRINTHASH; #Get number of keys (scalar context)
my $loop_count = 1; #Use a variable to count number of iteration
foreach $title (keys %FilterSPRINTHASH){
$openSP = $FilterSPRINTHASH{$title}{openSP};
$estSP = $FilterSPRINTHASH{$title}{estSP};
$line = "'$title':{'openSP' : $openSP, 'estSP' : $estSP}\n";
if($loop_count == $count){
#this is the last iteration, so remove the comma from line
$line =~ s/,+$//;
}
print $outfile "$line\n";
$loop_count++;
}
答案 2 :(得分:0)
我会通过将输出存储在数组中然后将其与您希望的行分隔符连接来实现此目的:
my @output; # storage for output
foreach $title (keys %FilterSPRINTHASH) {
# create each line
my $line = sprintf "'%s':{'openSP' : %s, 'estSP' : %s}", $title, $FilterSPRINTHASH{$title}{openSP}, $FilterSPRINTHASH{$title}{estSP};
# and put it in the output container
push @output, $line;
}
# join all outputlines with comma and newline and then output
print $outfile (join ",\n", @output);