搜索模式未在filename.pl第15行

时间:2017-04-19 11:36:13

标签: perl

Search pattern not terminated in Perl 这个链接对我没用。

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

#FILE_HANDLE -> name used like that because of Bareword
#open file passed as argument
open FILE_HANDLE, "<", "$ARGV[0]" or die $!;

#reading file line by line
while (<FILE_HANDLE>)
{
    my $var = "Var";
    my $line = $_ if /\b$var\b/;
    #empty string check for $line
    if (length ($line // ''))
    {
        #spliting the string on the basis of space delimiter and stroing in array
        my @lineWords=split (' ', $line);
        my $signalname="$lineWords[2]";
        my $suffix="$lineWords[3]";
        my $compareWord='l:-1';
        my $i=3;
        while ($suffix ne $compareWord)
        {
            $i++;
            $signalname .= $suffix;
            $suffix="$lineWords[$i]";
        }
        $i += 3;
        print "$signalname $lineWords[$i]\n";
    }
}
close FILE_HANDLE;

在这个perl脚本中,我收到以下错误:

  

搜索模式未终止于   CreateNameId.pl行   15。

这个脚本适用于某些文件,但是对于某些文件会出现上述错误。

2 个答案:

答案 0 :(得分:2)

该剧本错过use 5.010;use Syntax::Construct '//';。您的Perl版本可能太旧,不支持“defined-or”运算符//

确切的等价物是

if (length (defined($line) ? $line : ''))

答案 1 :(得分:1)

在引入defined-或operator //时,您正在使用早于v5.10的Perl版本,因此Perl将//视为空的正则表达式模式

而不是

if ( length ($line // '') ) { ... }

使用

if ( $line =~ /\S/ ) { ... }

也拒绝仅包含空格字符的行