【发布时间】:2020-08-01 00:10:39
【问题描述】:
我有一个包含以下内容的文件:
sub is_top_level0 { # with comment
print '\nFollowed by comment \n'; # The comment
# line from begin
}
基本上,我使用以下代码,其中 $sFilename 设置为正确的文件名:
use PPR;
open(DATAIN, $sFilename);
my @aFileData = map({ s/\r$//g; $_; } <DATAIN>);
close (DATAIN);
my $aRawFileData= \@aFileData;
printf("Read:\n@{$aRawFileData}===============\n");
my $aUncommentFileData = PPR::decomment($aRawFileData);
printf("Uncomment:\n@{$aUncommentFileData}===============\n");
输出是:
Read:
sub is_top_level0 { # with comment
print '\nFollowed by comment \n'; # The comment
# line from begin
}
===============
Uncomment:
sub is_top_level0 { # with comment
print '\nFollowed by comment \n'; # The comment
# line from begin
}
===============
可以看出,名为“Uncomment”的部分仍然包含 cmets。
如何处理?
(注意问题可能听起来有点傻,但我不是perl程序员,只是想修改一些现有的代码)
编辑:正如我在@Dada 的答案的评论中所写的小说明(并且也已添加到答案中):
问题可能不够清楚,但我想在数组
$aRawFileData和$aUncommentFileData中提供数据(使用行终止符\n),这样我就可以遍历数组(因为它是目前完成)。
【问题讨论】:
-
提示:
map({ s/\r$//g; $_; } <DATAIN>)会比map { s/\r$//r } <DATAIN>更清晰(假设您之前没有更改$/,因此/g是无用的;否则添加/g)跨度> -
提示:使用词法文件句柄而不是全局句柄。 即,使用
open my $DATAIN, '<', $sFilename而不是open DATAIN, '<', $sFilename -
提示:使用 3 参数 open 而不是 2。ie,使用
open my $DATAIN, '<', $sFilename而不是open my $DATAIN, '$sFilename' -
提示:检查
open是否成功。 即,做open my $DATAIN, '<', $sFilename or die "Could not open $sFilename: $!" -
非常感谢您的提示,我会看看它,但我想在现有程序中尽可能少地更改(因为我不是 perl 程序员)。
标签: perl