文件中的特殊字符退出Perl中的while循环

时间:2014-02-22 06:19:17

标签: perl while-loop readfile eof

我使用以下说明为.txt文件编写了一个简单的解析器:

my $file2 = "test.txt";
open ($process, "<",$file2) or die "couldn't manage to open the file:$file2!";

while (<$process>)

{

...

}

在我试图解析的一些文件中,有一个特殊字符,就像右箭头( - &gt;),我无法从文件粘贴到这里。 每次解析器命中该字符( - &gt;)时,它都会退出文件而不进行处理直到结束。

有没有办法避免它并继续处理文件直到最后?

我正在使用perl 5.6.1(我不能使用更新版本),我需要处理的文件可能包含这些特殊字符。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不认为这会导致你的问题,但几乎可以肯定是那个中间缺失的东西。您是否在文件输入的while块中使用eval?这是一个最小的示例,显示包含 - &gt;的流不会造成困难:

#!/usr/bin/env perl
use warnings;
use strict;

while(<DATA>) {
  print "Data[$.]: $_";
}

__DATA__
this is some data
this is also some data
-> this looks fine
foo->dingle also looks fine

这会产生:

$ perl ./foo.pl 
Data[1]: this is some data
Data[2]: this is also some data
Data[3]: -> this looks fine
Data[4]: foo->dingle also looks fine

所以, - &gt; perl中的字符很特殊:

  

“ - &gt;”是一个中缀解除引用运算符,就像在C和C ++中一样。如果   右边是[...],{...}或(...)下标,然后   左侧必须是对数组的硬引用或符号引用,   分别是散列或子程序。 (或者从技术上讲,a   如果是数组或散列,则能够持有硬引用的位置   引用用于赋值。)参见perlreftut和perlref。

     

否则,右侧是方法名称或简单标量变量   包含方法名称或子程序引用,以及   左侧必须是一个对象(一个有福的参考)或一个类   name(即包名)。见perlobj。

因此,如果我不得不猜测,你肯定会使用eval来尝试解析你的内容,并且它无法取消引用操作符的左侧并且崩溃。如果您需要进一步的帮助,请提供命令行错误消息或while循环中的代码。