当模式匹配文件中的第一行时,“split”不起作用

时间:2016-10-19 21:56:52

标签: perl split

我正在处理文件,查找类似以下内容的文字:

  • module mymodule (
  • module mymodule(
  • module mymodule

(可能在同一条线上,也可能不在同一条线上。还有其他变化,但我们假设它是上面显示的三个之一。

我将文件粘贴到$verilog_model并执行拆分

$barename = 'mymodule';

my $verilog_model = do { local $/; <VIF> };
close VIF;

($head, $body) = split /module\s+$barename[\050]/, $verilog_model, 2;
$extra = '(';

if ( $head eq '' ||  $body eq '') {
    ($head, $body) = split /module\s+$barename\s+\050/,  $verilog_model, 2;
    $extra = '(';
}

if ( $head eq '' ||  $body eq '') {
    ($head, $body) = split /module\s+$barename/,  $verilog_model, 2;
    $extra = '';
}

split是文件的第一行时,这些module调用都不起作用,但当我添加空格作为第一行时,split能够找到模块并且我得到了我想要的$head$body

为什么split无法在文件的第一行找到module mymodule时?

1 个答案:

答案 0 :(得分:1)

  

当模块是文件的第一行

时,这些拆分都不起作用

很难对此发表评论,因为如果拆分按预期工作,你就不会解释你会看到什么。

我认为你可能会误解split()的作用。传递给split()的正则表达式用作拆分列表中两个元素之间的分隔符。因此,如果正则表达式在字符串的最开头匹配,则返回的列表中的第一个元素必须为空。

你正在做与此相同的事情:

my $string = "\tSome data";
my ($head, $body) = split /\t/, $string;

在这种情况下,$head将为空,$body将包含“部分数据”。

如果这不能解释您所看到的内容,请update your question澄清您想要看到的内容以及您实际看到的内容。