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。
这个脚本适用于某些文件,但是对于某些文件会出现上述错误。
答案 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/ ) { ... }
也拒绝仅包含空格字符的行