Perl 大骆驼书的“此处”文档一节对原格式输出有详细介绍。
如果我们想输出一大段的内容,我们就可以用原格式输出的语法来实现。
#!/usr/bin/perl
open OUT, ">AOI21.vec" or die $!;
$A1=0;
$A2=0;
$B1=0;
$count=0;
@value=qw(0 1);
print OUT << "END";
radix 1 1 1 1
vname A1 A2 B1 Q
io i i i o
tdelay '-td' 1 1 1 0
vil 0.0
vih vp
vol 'vp*0.1'
voh 'vp*0.9'
trise 'slp'
tfall 'slp'
tunit ps
0 0 0 0 x
END
foreach $value1(@value){
$A1=$value1;
foreach $value2(@value){
$A2=$value2;
foreach $value3(@value){
$B1=$value3;
$Q=(not (($A1 and $A2) or $B1));
if($Q==1){
$Q=1;
}else{
$Q=0;
}
$count++;
print OUT "'$count*tcy' $A1 $A2 $B1 $Q\n";
}
}
}
chmod 0755, "AOI21.vec";
close OUT;
解析如下:
print OUT << "END";
END
这里END是一个标志,你也可以用别的字符来标记。
注意第一个END加双引号,结尾带上分号;
第二个END独立一行,不要带分号
END之间的内容如果用$value这类变量,输出时会输出对应的值。
如果你要保留$这个符号,记得前面加上反斜线。
$Q=(not (($A1 and $A2) or $B1));
if($Q==1){
$Q=1;
}else{
$Q=0;
}
之所以去判断$Q是否是1,是因为not这个运算,可能会使输出0变成输出空格。所以用一段if语句进行强制转换。
当运算太复杂,而且是布尔类型的运算时,可以采用这种方法进行输出。(如xor,not等)
chmod 0755, "AOI21.vec";
改变文件的权限为755,由于默认8进制,所以前面带上0。
输出结果如下:
radix 1 1 1 1
vname A1 A2 B1 Q
io i i i o
tdelay '-td' 1 1 1 0
vil 0.0
vih vp
vol 'vp*0.1'
voh 'vp*0.9'
trise 'slp'
tfall 'slp'
tunit ps
0 0 0 0 x
'1*tcy' 0 0 0 1
'2*tcy' 0 0 1 0
'3*tcy' 0 1 0 1
'4*tcy' 0 1 1 0
'5*tcy' 1 0 0 1
'6*tcy' 1 0 1 0
'7*tcy' 1 1 0 0
'8*tcy' 1 1 1 0