我使用以下说明为.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(我不能使用更新版本),我需要处理的文件可能包含这些特殊字符。
感谢您的帮助。
答案 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循环中的代码。