因此,在以下情况下,我有一些问题可以解决Perl的作用:
while(1){
$inputLine=<STDIN>
#parse $inputLine below
#BUT FIRST, I need to check if $inputLine = EOF
}
在我得到使用while(<>){}
的明显答案之前,让我说有一个非常强大的理由我必须做上述事情(基本上设置一个警报来中断阻止,我不希望代码到杂乱的例子)。
有没有比较$inputLine == undef
(因为我认为这是STDIN最后返回的)。
感谢。
答案 0 :(得分:11)
在循环中,使用
last unless defined $inputLine;
来自perlfunc documentation on defined
:
定义EXPR
的定义强>返回一个布尔值,告知EXPR是否具有未定义值
undef
以外的值。如果EXPR不存在,则会检查$_
。许多操作返回
undef
以指示失败,文件结束,系统错误,未初始化的变量和其他异常情况。此功能允许您将undef
与其他值区分开来。 (一个简单的布尔测试不会区分undef
,零,空字符串和"0"
,它们都同样是假的。)注意,因为undef
是一个有效的标量,它的存在并不一定表示异常情况:pop
在其参数为空数组时返回undef
,或者当要返回的元素恰好是undef
时返回。{/ p>
答案 1 :(得分:4)
答案 2 :(得分:0)
您可以在文件句柄上使用eof。如果FILEHANDLE上的下一次读取是EOF, eof 将返回1。
答案 3 :(得分:0)
以下内容将对输入行中只有换行符的行出现问题,或者在某些行的开头出现FF的情况下(换页-文件是程序的输出在20世纪70年代末开发的,并且仍然具有用于行式打印机的格式,并且仍在FORTRAN中-我确实想念背面用于绘制流程图的宽幅连续纸)。
open (SIMFIL, "<", 'InputFileName') or die "Can´t open InputFileName\n" ;
open (EXTRDATS, ">>", 'OutputFileName' ) or die "Can´t open OutputFileName\n";
$Simfilline = "";
while (<SIMFIL>) {
$Simfilline = <SIMFIL>;
print EXTRDATS $Simfilline;
$Simfilline = <SIMFIL>;
print EXTRDATS $Simfilline;
}
close SIMFIL;
close EXTRDATS;
` 以下是eof派上用场的时候-表达式:“ while()”在文件末尾以外的条件下可以返回false。
open (SIMFIL, "<", 'InputFileName') or die "Can´t open InputFileName\n" ;
open (EXTRDATS, ">>", 'OutputFileName' ) or die "Can´t open OutputFileName\n";
$Simfilline = "";
while (!eof SIMFIL) {
$Simfilline = <SIMFIL>;
print EXTRDATS $Simfilline;
$Simfilline = <SIMFIL>;
print EXTRDATS $Simfilline;
}
close SIMFIL;
close EXTRDATS;
最后一个代码片段似乎完全复制了输入文件。