【发布时间】:2016-05-28 21:03:03
【问题描述】:
我正在尝试学习 Perl here,教程在阅读一些文件后建议使用以下代码 sn-p:
my $team_number = 42;
my $filename = 'input.txt';
open(my $fh, '<', $filename) or die "cannot open '$filename' $!";
my $found;
while(<$fh>) {
chomp;
last if($_ eq "Team $team_number");
}
die "cannot find 'Team $team_number'" if(eof $fh);
不过,我不太明白为什么我们需要 chomp。 chomp 删除新行。所以在每个循环中,我们删除行尾的新行,但为什么呢?如果您删除 chomp,脚本确实会引发错误,但我不明白为什么。
我了解 chomping 的作用,但我不明白为什么必须匹配,因为我们已经遍历了所有行 - 为什么需要删除新行?只有在阅读了 Kallol 的帖子后,我才意识到如果不切碎 eq 会失败,因为循环的实际字符串是 Team 42\n。所以这就是我的问题与其他 chomp 问题不同的原因:我不知道为什么我的代码在没有 chomp 的情况下无法运行,并且有人指出了我正确的方向。
【问题讨论】:
-
我不是反对者,但这是一个非常普遍的问题;你在发帖前找过重复的吗?
-
不相关,但这段代码写得很糟糕,因为如果它在最后一行,它会说找不到 Team 42...
-
@tripleee 我做到了!关于 chomp 和 Perl 有很多问题,第一批对我没有帮助。或者至少我从这些问题中不明白发生了什么,因为它们与我的问题不同。
-
chompdocumentation 在我看来是一个详尽的答案。特别是; “当您担心最终记录可能缺少换行符时,它通常用于从输入记录末尾删除换行符。” -
@tripleee 我明白这一点,但我不明白为什么必须匹配,因为我们已经遍历了所有行 - 为什么需要删除新行?只有在阅读了 Kallol 的帖子后,我才意识到
eq如果不被 chomped 会失败,因为循环的 actual 字符串是 Team 42\n。所以这就是我的问题与其他 chomp 问题不同的原因:我不知道为什么我的代码在没有 chomp 的情况下无法正常工作,并且有人指出了我正确的方向。