我正在处理文件,查找类似以下内容的文字:
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
时?
答案 0 :(得分:1)
当模块是文件的第一行
时,这些拆分都不起作用
很难对此发表评论,因为如果拆分按预期工作,你就不会解释你会看到什么。
我认为你可能会误解split()
的作用。传递给split()
的正则表达式用作拆分列表中两个元素之间的分隔符。因此,如果正则表达式在字符串的最开头匹配,则返回的列表中的第一个元素必须为空。
你正在做与此相同的事情:
my $string = "\tSome data";
my ($head, $body) = split /\t/, $string;
在这种情况下,$head
将为空,$body
将包含“部分数据”。
如果这不能解释您所看到的内容,请update your question澄清您想要看到的内容以及您实际看到的内容。