首页 > 解决方案 > 在perl的括号中分割一行

问题描述

我有这个字符串,我想在左括号处拆分。

SUBJ/TROPICAL DEPRESSION 26W (TWENTYSIX) WARNING NR 002/

在这种情况下,我将有两个字符串

SUBJ/TROPICAL DEPRESSION 26W 

TWENTYSIX) WARNING NR 002/

我试图使用 split 功能来做这件事

$line=" SUBJ/TROPICAL DEPRESSION 26W (TWENTYSIX) WARNING NR 002/"
@namearr = split /\(/, ${line);

但我最终收到一条错误消息。

(Might be a runaway multi-line "" string starting on line )

如何调整上面的代码,以便可以根据括号成功拆分行?

标签: stringperlsplit

解决方案


您发布的代码不会导致您声称的错误。

$ perl -e'
   $line=" SUBJ/TROPICAL DEPRESSION 26W (TWENTYSIX) WARNING NR 002/"
   @namearr = split /\(/, ${line);
' && echo ok
Array found where operator expected at -e line 3, near "@namearr"
        (Missing semicolon on previous line?)
syntax error at -e line 3, near "@namearr "
Missing right curly or square bracket at -e line 4, at end of line
Execution of -e aborted due to compilation errors.

您发布的代码中有三个错误。

  1. ;语句之间缺失。
  2. ${line)是 的错字${line},应该是$line${line}有效,但这是无证和不寻常的。
  3. 您没有限制变量的范围。一直用use strict; use warnings;

$ perl -e'
   use strict;
   use warnings;
   my $line = " SUBJ/TROPICAL DEPRESSION 26W (TWENTYSIX) WARNING NR 002/";
   my @namearr = split /\(/, $line;
' && echo ok
ok

您询问的错误通常发生在您缺少结束分隔符(引号)时,或者当您的文字具有未转义的分隔符时。

$ perl -e'
   my $s1 = "foo;
   my $s2 = "bar";
'
Bareword found where operator expected at -e line 3, near "my $s2 = "bar"
  (Might be a runaway multi-line "" string starting on line 2)
        (Do you need to predeclare my?)
String found where operator expected at -e line 3, at end of line
        (Missing semicolon on previous line?)
syntax error at -e line 3, near "my $s2 = "bar"
Can't find string terminator '"' anywhere before EOF at -e line 3.

推荐阅读