【发布时间】:2016-05-29 08:53:30
【问题描述】:
假设file.txt 每行只有一个句子如下:
约翰·德普是个好人。 他很聪明。 他什么都能做。 来见见约翰·德普。
Perl 代码如下:-
open ( FILE, "file.txt" ) || die "can't open file!";
@lines = <FILE>;
close (FILE);
$string = "John Depp";
foreach $line (@lines) {
if ($line =~ $string) { print "$line"; }
}
输出将是第一行和第四行。
我想让它适用于具有随机换行符的文件,而不是每行一个英文句子。我的意思是它也应该适用于以下情况:-
约翰·德普是个好人。他非常聪明。他什么都能做。来见见约翰·德普。
输出应该是第一句和第四句。
有什么想法吗?
【问题讨论】:
-
我最近才知道我自己做错了的一个潜在问题:当你做一个 die 语句时,它应该是“or die”而不是“|| die”,因为它们实际上有不同的优先级。在这种情况下它会起作用,因为只有一个语句,它不能与其他任何东西组合在一起。但无论如何你都应该在任何地方都使用“or die”。
-
@crimson 在这种情况下,由于
open调用中使用了括号,因此 OP 很好。一个更严重的问题是文件的完全不必要的啜饮。此外,die消息应包括文件名和错误消息$!。此外,使用词法文件句柄和open的三参数形式将使代码符合最佳实践。 -
你当然是对的。我并没有真正看大部分代码,我只是看了一眼,就想把它扔进去。